Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Usable Software Design
A Keynote by Alex Bolboaca
Günaydın Istanbul!!!!
Me
●
Facilitated first code
retreat outside US
●
Polyglot programmer
●
Trainer, Coach
●
Turned product
developer
●
CTO @ Mozaic Labs
From a Team That Brought You
●
Code retreats in multiple languages -
http://coderetreat.org/history
●
Brutal Refactoring Game
●
Taking Baby Steps
●
Teddy Bear Pairing
●
I TAKE Unconference
●
And now usable software design
http://mozaicworks.com
Me - Product Developer
My Current Product – eventrix.co
My belief:
YOU Deserve Better!
Usable Software Design
Usable Software Design
Usable Software Design
Naomi Weast
Actress, not a programmer
https://plus.google.com/110657773112027365790/posts
Usable Software Design
It reminds me of something else
Jacques Carelman
Artist, creator of “The Catalogue of Impossible Objects” in the 60s
http://www.patakosmos.com/wp-content/uploads/2013/09/RDA00147250.jpg
Coffee pot for masochists
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/coffeepot-for-masochists.html
Absorbent Bottle
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/absorbent-bottle.html
Siamese Hammers
Catalogue of Impossible Objects by Jacques Carelman
http://impossibleobjects.com/catalogue/siamese-hammers.html
It reminds me of something I read in a book ...
Donald A. Norman
Author of “The Design of Everyday Things”
http://www.jnd.org/NNg-Photographs/Photo1.jpg
“It is the duty of
machines and those
who design them to
understand people. It
is not our duty to
understand the
arbitrary, meaningless
dictates of machines.”
User Centric Design Process by UXPA
Revolution started by Donald A. Norman's book
http://uxmastery.com/what-does-a-user-centred-design-process-look-like/
Any design has a user.
Who is the user of
software design?
Can't be the end user.
Then: the developer
=> Developer-centric
software design? DX?
How about “Usable
Software Design”?
So how to apply UX techniques to
software design?
●
Personas
●
User journey for developer
●
Quality attributes
●
Usability testing
●
Specific practices
Personas
Developer Persona For Your Team
●
Kernel Developer
●
Java Enterprise Developer
●
Rails Developer
●
C/C++ Embedded Developer
●
Android Developer
●
Front-end Javascript + html + CSS developer
●
Etc.
Each persona
has different
needs.
Usability
depends on the
user!
Example of Team Agreement
Usable Software Design means to us that:
1. It is written for developers to read
2. It is easy to find where to modify the code
3. Any modification has a minimal ripple-effect
4. It is easy AND fast to validate that we did the right thing
5. We don’t have to do similar modifications in several places
Usable Software Design – A Federating Concept
by Johan Martinsson
Next Step: Practices
“It is written for developers to read”
=> coding guidelines, clean code etc.
“It is easy to find where to modify the code”
=> navigability, consistency etc.
“Any modification has a minimal ripple effect”
=> follow Open Closed Principle, Single Responsibility Principle etc.
User Journeys
You Are The User: Changing Code
●
Figure out what you need to change
●
Navigate there
●
Read the code, tests, documentation, comments
●
Write/change code, write/change tests
●
Refactor
●
Build
●
Validate
●
Integrate
Figure Out What To Change
Static structure
{},
Understand
runtime behavior
Example: Namespaces
Example: Modules
Is Your Design Easy to Navigate?
Is Your Design Easy to Navigate?
●
What module / namespace to look in?
– See previous examples
●
How is that thing named?
– Should be Consistent, Memorable, Precise
●
How deep is the inheritance tree?
Example: Consistency
Example: Modules APIs
Example: Modules APIs
Quality Attributes for
Usability
What is Usable Software Design?
Usable Software Design is
any code structure that exhibits
design qualities similar to usability
5 Design Qualities of Usability
1. Learnability
2. Efficiency
3. Memorability
4. Errors
5. Satisfaction
http://www.nngroup.com/articles/usability-101-introduction-to-usability/
How easy it is to accomplish basic tasks the first time
you're using the design?
How quickly can you perform a task once you've
learned the design?
When you go back to the design after a period of not
using it, how easy is to become efficient again?
How many errors do you make, how severe are they
and how can you recover from them?
How pleasant it is to use the design?
1. Learnability
How easy is it for users to accomplish
basic tasks the first time they encounter
the design?
Hints: Design For Learnability
Code structure that shows what the application does
Consistency
Minimal Surprise
Use Clearly Defined Modules With Clear APIs
Readability / Clean Code
Navigability
Add Usage examples – tests / comments etc
Test Learnability
Measure how long it takes for developers outside
your team to understand the purpose of a class
with as little help as possible.
2. Efficiency
Once users have learned the design, how
quickly can they perform tasks?
Hints: Design For Efficiency
Use code constructs the whole team understands
Consistency
Fast Validation
Test Efficiency
Retro question: “what slowed you down in the past
two weeks?”
Measure how long it takes for developers to finish
typical tasks (not simple, but typical)
3. Memorability
When you go back to the design after a
period of not using it, how easy is to
become efficient again?
Memorability ≈ Efficiency + Learnability
4. Errors
How many errors do you make?
How severe are these errors?
How easily can they recover from the
errors?
Hints: Design For Mistake Proofing
It's the system's fault
Write automated tests
Eliminate exceptions
Pass mandatory arguments to constructor
(more difficult when using Dependency Injection libraries)
Avoid Primitive Obsession
Principle of Minimum Surprise
Mistake-prone Design
Mistake-proof Design
Test Mistake-Proofing
How many bugs do we have?
What is the main cause of the bugs?
(remember, it's typically in the design)
How can we change the design to avoid
it?
5. Satisfaction
How pleasant is it to use the design?
Hints: Design For Satisfaction
Strictly personal, but relevant
Test Satisfaction
What parts of the system are unpleasant to
use?
How can we change them to be more
pleasant?
Usability Testing
How To Do Usability Testing
●
Pick a few common tasks
●
Ask a developer who is not part of the team but
knows the technology to do them
●
Gather the feedback
●
Define next improvement actions
The Tasks
I forgot to mention
●
You are not allowed to start the application, only
navigate through code
Results
●
First two tasks were too vague
– Create new event, create new user => write a new
feature? Create a domain entity?
– The feature existed, I was hinting at just creating a
domain entity and saving it from the code (no UI)
– It showed an inconsistency in design
●
Task 3 “Explain how an event is created in the
application” took less than 5'
●
Task 4 “Validation for event creation” took less than 5', but it was
incomplete
– Claudia missed the client-side validation because...
– It was using custom tags extracted in a plugin that...
– Required to run “grails refresh-dependencies” but...
– It wasn't compiling because …
– It was using a library that …
– Needed compilation and publish to local maven
●
Improvement:
– Write a script “installDev” that installs everything needed for a new dev
●
Task 5 “error management for event creation”
– <5'
– Correct answer
●
Task 6 “Reset password flow”
– Stopped after 15'
– Got around the middle of the flow
●
Conclusion
– Difficult to follow a more complex flow through an
application
– Need some way to provide this information fast (work
in progress)
Open Questions
●
What was your general impression of the design?
– “very nice, easy to understand”
●
What helped you understand?
– “the names & the structure”
●
What prevented you from understanding the
reset password flow?
– “difficult to follow”
Usability Tests - Conclusions
●
Usability tests are very useful for improving
productivity
●
Every time you take 1' more to understand the
code, you are not implementing a new feature
●
(If you finish a feature faster, you have more time
to read Quora :D)
Design Elements
Design Elements =
Constrained Classes
●
Constrained Classes = Higher Level design
entities
●
~ design patterns (not quite)
Design Elements – Example from
eventrix.co
●
Controller
●
Command Object
●
Application Service
●
Database Service (Command)
●
Database Query
●
View Model
Controller
Responsibilities
●
Delegate the
operations on the
request input
●
Render the correct
view / template /
error
Collaborators
●
Command Objects
●
Application Services
●
View Models
How To Test:
Page Tests
Command Object
Responsibilities
●
Validate the request
●
Delegate update /
delete operations
Collaborators
●
Database Services
●
Database Queries
How To Test:
Unit Tests
Application Service
Responsibilities
●
Complex logic
●
Delegate all database
operations
Collaborators
●
Database Services
●
Database Queries
How To Test:
Unit Tests
Database Service (Command)
Responsibilities
●
Update / delete
database data
Collaborators
●
GORM subsystem
How To Test:
Integration Tests
With Real Database
Database Query
Responsibilities
●
Query database data
Collaborators
●
GORM subsystem
How To Test:
Integration Tests
With Real Database
View Model
Responsibilities
●
Transform GORM
entities into maps
ready for rendering
●
! Limit the data
returned to the view
●
! Separate as much as
possible
Collaborators
●
Domain Model
classes
How To Test:
Unit Tests
Design Elements Are Not Everything
●
We discovered some more – e.g. multiple steps
flow
●
Utility classes
But they are ~90% of the code
●
Typical use cases:
– Request to create / update / delete
something: controller → command object →
database command → view model →
controller render
– Request to read something: controller →
application service / db query → view model
→ controller render
Conclusions
What To Tell Managers
Usable Software Design has the potential to bring four
economical benefits:
●
Faster integration of new developers in the team
(learnability)
●
Faster time to implement typical (not simple) tasks
(efficiency)
●
Making less mistakes (mistake-proofing)
●
Feeling more motivated (satisfaction)
Recap
●
The developer is the user of software design
●
Usable software design means code structure that exhibits the
qualities of usability: Learnability, Efficiency, Memorability, Error
Treatment and Satisfaction
●
Define the personas of your team
●
Create a team agreement
●
Start applying practices that help the agreement
●
Run usability tests
●
Identify design elements from your code to increase consistency
●
This is just the beginning
My belief:
YOU Deserve Better!
Tell me about your experiences
alex.bolboaca
@mozaicworks.com
@alexboly
mozaicworks.com/blog
alexbolboaca.ro
https://www.linkedin.com/in/
alexandrubolboaca/
Buy my book!
Special price for you:
https://leanpub.com/usablesoftwaredesign/c/thank-you-java-day-istanbul
Pay as little as for two Turkish Pizzas
Q&A
“The important thing is
not to stop questioning”

More Related Content

What's hot

Code review
Code reviewCode review
Code review
Aleksey Solntsev
 
DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
Ahmed Misbah
 
Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?
Mikalai Alimenkou
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
Knoldus Inc.
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017
Lemi Orhan Ergin
 
How to Become a Senior
How to Become a SeniorHow to Become a Senior
How to Become a Senior
Ivan Katunou
 
DevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to PracticeDevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to Practice
Lemi Orhan Ergin
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
Andy Maleh
 
Just start coding
Just start codingJust start coding
Just start coding
Jane Prusakova
 
Introduction to TDD
Introduction to TDDIntroduction to TDD
Introduction to TDD
Ahmed Misbah
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an Imperative
Fadi Stephan
 
Automated Testing with Logic Apps and Specflow
Automated Testing with Logic Apps and SpecflowAutomated Testing with Logic Apps and Specflow
Automated Testing with Logic Apps and Specflow
BizTalk360
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
Michael Palotas
 
Lessons Learned When Automating
Lessons Learned When AutomatingLessons Learned When Automating
Lessons Learned When Automating
Alan Richardson
 
Four Stages of Automated Testing by Bradley Temple
Four Stages of Automated Testing by Bradley TempleFour Stages of Automated Testing by Bradley Temple
Four Stages of Automated Testing by Bradley Temple
QA or the Highway
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
Lars Thorup
 
Test team dynamics, Антон Мужайло
Test team dynamics, Антон МужайлоTest team dynamics, Антон Мужайло
Test team dynamics, Антон Мужайло
Sigma Software
 
Agile Software Development Process Practice in Thai Culture
Agile Software Development Process Practice in Thai CultureAgile Software Development Process Practice in Thai Culture
Agile Software Development Process Practice in Thai Culture
Wee Witthawaskul
 
Agile Software Development in Practice - A Developer Perspective
Agile Software Development in Practice - A Developer PerspectiveAgile Software Development in Practice - A Developer Perspective
Agile Software Development in Practice - A Developer Perspective
Wee Witthawaskul
 
Kku2011
Kku2011Kku2011

What's hot (20)

Code review
Code reviewCode review
Code review
 
DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
 
Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?Development without Testers: Myth or Real Option?
Development without Testers: Myth or Real Option?
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017
 
How to Become a Senior
How to Become a SeniorHow to Become a Senior
How to Become a Senior
 
DevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to PracticeDevOps & Technical Agility: From Theory to Practice
DevOps & Technical Agility: From Theory to Practice
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
 
Just start coding
Just start codingJust start coding
Just start coding
 
Introduction to TDD
Introduction to TDDIntroduction to TDD
Introduction to TDD
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an Imperative
 
Automated Testing with Logic Apps and Specflow
Automated Testing with Logic Apps and SpecflowAutomated Testing with Logic Apps and Specflow
Automated Testing with Logic Apps and Specflow
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Lessons Learned When Automating
Lessons Learned When AutomatingLessons Learned When Automating
Lessons Learned When Automating
 
Four Stages of Automated Testing by Bradley Temple
Four Stages of Automated Testing by Bradley TempleFour Stages of Automated Testing by Bradley Temple
Four Stages of Automated Testing by Bradley Temple
 
Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)Test and Behaviour Driven Development (TDD/BDD)
Test and Behaviour Driven Development (TDD/BDD)
 
Test team dynamics, Антон Мужайло
Test team dynamics, Антон МужайлоTest team dynamics, Антон Мужайло
Test team dynamics, Антон Мужайло
 
Agile Software Development Process Practice in Thai Culture
Agile Software Development Process Practice in Thai CultureAgile Software Development Process Practice in Thai Culture
Agile Software Development Process Practice in Thai Culture
 
Agile Software Development in Practice - A Developer Perspective
Agile Software Development in Practice - A Developer PerspectiveAgile Software Development in Practice - A Developer Perspective
Agile Software Development in Practice - A Developer Perspective
 
Kku2011
Kku2011Kku2011
Kku2011
 

Similar to Usable Software Design

Agile
AgileAgile
Agile
Komal2525
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code clean
Brett Child
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
Shafiul Azam Chowdhury
 
Services, tools & practices for a software house
Services, tools & practices for a software houseServices, tools & practices for a software house
Services, tools & practices for a software house
Paris Apostolopoulos
 
Professionalizing the Front-end
Professionalizing the Front-endProfessionalizing the Front-end
Professionalizing the Front-end
Jordi Anguela
 
What is xp
What is xpWhat is xp
What is xp
Simone Federici
 
A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5
SSW
 
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It IsAmanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Rehgan Avon
 
DDD with Behat
DDD with BehatDDD with Behat
DDD with Behat
Anton Serdyuk
 
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
Nacho Cougil
 
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Mozaic Works
 
Agileand saas davepatterson_armandofox_050813webinar
Agileand saas davepatterson_armandofox_050813webinarAgileand saas davepatterson_armandofox_050813webinar
Agileand saas davepatterson_armandofox_050813webinar
Roberto Jr. Figueroa
 
Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectively
Ashutosh Agarwal
 
Usability for all budgets
Usability for all budgetsUsability for all budgets
Usability for all budgets
Cambridge Product Management Network
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
Svetlin Nakov
 
Requirements the Last Bottleneck
Requirements the Last BottleneckRequirements the Last Bottleneck
Requirements the Last Bottleneck
Karwin Software Solutions LLC
 
Chris OBrien - Azure DevOps for managing work
Chris OBrien - Azure DevOps for managing workChris OBrien - Azure DevOps for managing work
Chris OBrien - Azure DevOps for managing work
Chris O'Brien
 
Demise of test scripts rise of test ideas
Demise of test scripts rise of test ideasDemise of test scripts rise of test ideas
Demise of test scripts rise of test ideas
Richard Robinson
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme Programming
Utkarsh Khare
 
Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Development
bsadd
 

Similar to Usable Software Design (20)

Agile
AgileAgile
Agile
 
Keeping code clean
Keeping code cleanKeeping code clean
Keeping code clean
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 
Services, tools & practices for a software house
Services, tools & practices for a software houseServices, tools & practices for a software house
Services, tools & practices for a software house
 
Professionalizing the Front-end
Professionalizing the Front-endProfessionalizing the Front-end
Professionalizing the Front-end
 
What is xp
What is xpWhat is xp
What is xp
 
A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5
 
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It IsAmanda Cinnamon - Treat Your Code Like the Valuable Software It Is
Amanda Cinnamon - Treat Your Code Like the Valuable Software It Is
 
DDD with Behat
DDD with BehatDDD with Behat
DDD with Behat
 
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
All you need is fast feedback loop, fast feedback loop, fast feedback loop is...
 
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
Alex Bolboacă: Usable Software Design at I T.A.K.E. Unconference 2015
 
Agileand saas davepatterson_armandofox_050813webinar
Agileand saas davepatterson_armandofox_050813webinarAgileand saas davepatterson_armandofox_050813webinar
Agileand saas davepatterson_armandofox_050813webinar
 
Managing software projects & teams effectively
Managing software projects & teams effectivelyManaging software projects & teams effectively
Managing software projects & teams effectively
 
Usability for all budgets
Usability for all budgetsUsability for all budgets
Usability for all budgets
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
 
Requirements the Last Bottleneck
Requirements the Last BottleneckRequirements the Last Bottleneck
Requirements the Last Bottleneck
 
Chris OBrien - Azure DevOps for managing work
Chris OBrien - Azure DevOps for managing workChris OBrien - Azure DevOps for managing work
Chris OBrien - Azure DevOps for managing work
 
Demise of test scripts rise of test ideas
Demise of test scripts rise of test ideasDemise of test scripts rise of test ideas
Demise of test scripts rise of test ideas
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme Programming
 
Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Development
 

More from Alexandru Bolboaca

Refactor legacy code through pure functions
Refactor legacy code through pure functionsRefactor legacy code through pure functions
Refactor legacy code through pure functions
Alexandru Bolboaca
 
Design Without Types
Design Without TypesDesign Without Types
Design Without Types
Alexandru Bolboaca
 
Thinking in Functions
Thinking in FunctionsThinking in Functions
Thinking in Functions
Alexandru Bolboaca
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
Alexandru Bolboaca
 
The Journey to Master Code Design
The Journey to Master Code DesignThe Journey to Master Code Design
The Journey to Master Code Design
Alexandru Bolboaca
 
What is good software design? And why it matters?
What is good software design? And why it matters?What is good software design? And why it matters?
What is good software design? And why it matters?
Alexandru Bolboaca
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
Alexandru Bolboaca
 
Agile Technical Leadership
Agile Technical LeadershipAgile Technical Leadership
Agile Technical Leadership
Alexandru Bolboaca
 
TDD As If You Meant It
TDD As If You Meant ItTDD As If You Meant It
TDD As If You Meant It
Alexandru Bolboaca
 
Hidden loops
Hidden loopsHidden loops
Hidden loops
Alexandru Bolboaca
 
Removing structural duplication
Removing structural duplicationRemoving structural duplication
Removing structural duplication
Alexandru Bolboaca
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
Alexandru Bolboaca
 
Why You Should Start Using Docker
Why You Should Start Using DockerWhy You Should Start Using Docker
Why You Should Start Using Docker
Alexandru Bolboaca
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
Alexandru Bolboaca
 
Applied craftsmanship
Applied craftsmanshipApplied craftsmanship
Applied craftsmanship
Alexandru Bolboaca
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
Alexandru Bolboaca
 
Stay focused
Stay focusedStay focused
Stay focused
Alexandru Bolboaca
 
Kanban intro
Kanban introKanban intro
Kanban intro
Alexandru Bolboaca
 
Unit testing-patterns
Unit testing-patternsUnit testing-patterns
Unit testing-patterns
Alexandru Bolboaca
 
Incremental design, simply explained
Incremental design, simply explainedIncremental design, simply explained
Incremental design, simply explained
Alexandru Bolboaca
 

More from Alexandru Bolboaca (20)

Refactor legacy code through pure functions
Refactor legacy code through pure functionsRefactor legacy code through pure functions
Refactor legacy code through pure functions
 
Design Without Types
Design Without TypesDesign Without Types
Design Without Types
 
Thinking in Functions
Thinking in FunctionsThinking in Functions
Thinking in Functions
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
 
The Journey to Master Code Design
The Journey to Master Code DesignThe Journey to Master Code Design
The Journey to Master Code Design
 
What is good software design? And why it matters?
What is good software design? And why it matters?What is good software design? And why it matters?
What is good software design? And why it matters?
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
 
Agile Technical Leadership
Agile Technical LeadershipAgile Technical Leadership
Agile Technical Leadership
 
TDD As If You Meant It
TDD As If You Meant ItTDD As If You Meant It
TDD As If You Meant It
 
Hidden loops
Hidden loopsHidden loops
Hidden loops
 
Removing structural duplication
Removing structural duplicationRemoving structural duplication
Removing structural duplication
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Why You Should Start Using Docker
Why You Should Start Using DockerWhy You Should Start Using Docker
Why You Should Start Using Docker
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
 
Applied craftsmanship
Applied craftsmanshipApplied craftsmanship
Applied craftsmanship
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
 
Stay focused
Stay focusedStay focused
Stay focused
 
Kanban intro
Kanban introKanban intro
Kanban intro
 
Unit testing-patterns
Unit testing-patternsUnit testing-patterns
Unit testing-patterns
 
Incremental design, simply explained
Incremental design, simply explainedIncremental design, simply explained
Incremental design, simply explained
 

Recently uploaded

Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Asher Sterkin
 
Splunk_Remote_Work_Insights_Overview.pptx
Splunk_Remote_Work_Insights_Overview.pptxSplunk_Remote_Work_Insights_Overview.pptx
Splunk_Remote_Work_Insights_Overview.pptx
sudsdeep
 
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
DiyaSharma6551
 
@Call @Girls in Ahmedabad 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Ahmedabad Ava...
 @Call @Girls in Ahmedabad 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Ahmedabad Ava... @Call @Girls in Ahmedabad 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Ahmedabad Ava...
@Call @Girls in Ahmedabad 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Ahmedabad Ava...
DiyaSharma6551
 
Intro to Amazon Web Services (AWS) and Gen AI
Intro to Amazon Web Services (AWS) and Gen AIIntro to Amazon Web Services (AWS) and Gen AI
Intro to Amazon Web Services (AWS) and Gen AI
Ortus Solutions, Corp
 
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai AvailableDombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
cristine510
 
@Call @Girls in Tirunelveli 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
 @Call @Girls in Tirunelveli 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla... @Call @Girls in Tirunelveli 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
@Call @Girls in Tirunelveli 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
JoyaBansal
 
AI Chatbot Development – A Comprehensive Guide  .pdf
AI Chatbot Development – A Comprehensive Guide  .pdfAI Chatbot Development – A Comprehensive Guide  .pdf
AI Chatbot Development – A Comprehensive Guide  .pdf
ayushiqss
 
How we built TryBoxLang in under 48 hours
How we built TryBoxLang in under 48 hoursHow we built TryBoxLang in under 48 hours
How we built TryBoxLang in under 48 hours
Ortus Solutions, Corp
 
@Call @Girls in Aligarh 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
 @Call @Girls in Aligarh 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A... @Call @Girls in Aligarh 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
@Call @Girls in Aligarh 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
msriya3
 
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
avufu
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
sachin chaurasia
 
Development of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML TechnologiesDevelopment of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML Technologies
MaisnamLuwangPibarel
 
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetKolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
lovelykumarilk789
 
dachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdfdachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdf
DNUG e.V.
 
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai AvailableGhatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
aviva54
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
DNUG e.V.
 
@Call @Girls in Kolkata 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Kolkata Avaulable
 @Call @Girls in Kolkata 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Kolkata Avaulable @Call @Girls in Kolkata 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Kolkata Avaulable
@Call @Girls in Kolkata 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Kolkata Avaulable
DiyaSharma6551
 
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
shristi verma
 
Panvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
Panvel @Call @Girls Whatsapp 9833363713 With High Profile OfferPanvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
Panvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
$A19
 

Recently uploaded (20)

Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
 
Splunk_Remote_Work_Insights_Overview.pptx
Splunk_Remote_Work_Insights_Overview.pptxSplunk_Remote_Work_Insights_Overview.pptx
Splunk_Remote_Work_Insights_Overview.pptx
 
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable @Call @Girls in Surat 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Surat Avaulable
@Call @Girls in Surat 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Surat Avaulable
 
@Call @Girls in Ahmedabad 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Ahmedabad Ava...
 @Call @Girls in Ahmedabad 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Ahmedabad Ava... @Call @Girls in Ahmedabad 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Ahmedabad Ava...
@Call @Girls in Ahmedabad 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Ahmedabad Ava...
 
Intro to Amazon Web Services (AWS) and Gen AI
Intro to Amazon Web Services (AWS) and Gen AIIntro to Amazon Web Services (AWS) and Gen AI
Intro to Amazon Web Services (AWS) and Gen AI
 
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai AvailableDombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Dombivli @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
 
@Call @Girls in Tirunelveli 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
 @Call @Girls in Tirunelveli 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla... @Call @Girls in Tirunelveli 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
@Call @Girls in Tirunelveli 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Cla...
 
AI Chatbot Development – A Comprehensive Guide  .pdf
AI Chatbot Development – A Comprehensive Guide  .pdfAI Chatbot Development – A Comprehensive Guide  .pdf
AI Chatbot Development – A Comprehensive Guide  .pdf
 
How we built TryBoxLang in under 48 hours
How we built TryBoxLang in under 48 hoursHow we built TryBoxLang in under 48 hours
How we built TryBoxLang in under 48 hours
 
@Call @Girls in Aligarh 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
 @Call @Girls in Aligarh 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A... @Call @Girls in Aligarh 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
@Call @Girls in Aligarh 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Tanisha Sharma Best High Class A...
 
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
一比一原版英国牛津大学毕业证(oxon毕业证书)如何办理
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
 
Development of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML TechnologiesDevelopment of Chatbot Using AI\ML Technologies
Development of Chatbot Using AI\ML Technologies
 
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real MeetKolkata @Call @Girls 🐱‍🐉  XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
Kolkata @Call @Girls 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Genuine WhatsApp Number for Real Meet
 
dachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdfdachnug51 - HCLs evolution of the employee experience platform.pdf
dachnug51 - HCLs evolution of the employee experience platform.pdf
 
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai AvailableGhatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
Ghatkopar @Call @Girls 🛴 9930687706 🛴 Aaradhaya Best High Class Mumbai Available
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
 
@Call @Girls in Kolkata 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Kolkata Avaulable
 @Call @Girls in Kolkata 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Kolkata Avaulable @Call @Girls in Kolkata 🐱‍🐉  XXXXXXXXXX 🐱‍🐉  Best High Class Kolkata Avaulable
@Call @Girls in Kolkata 🐱‍🐉 XXXXXXXXXX 🐱‍🐉 Best High Class Kolkata Avaulable
 
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
₹Call ₹Girls Andheri West 09967584737 Deshi Chori Near You
 
Panvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
Panvel @Call @Girls Whatsapp 9833363713 With High Profile OfferPanvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
Panvel @Call @Girls Whatsapp 9833363713 With High Profile Offer
 

Usable Software Design

  • 1. Usable Software Design A Keynote by Alex Bolboaca
  • 3. Me ● Facilitated first code retreat outside US ● Polyglot programmer ● Trainer, Coach ● Turned product developer ● CTO @ Mozaic Labs
  • 4. From a Team That Brought You ● Code retreats in multiple languages - http://coderetreat.org/history ● Brutal Refactoring Game ● Taking Baby Steps ● Teddy Bear Pairing ● I TAKE Unconference ● And now usable software design http://mozaicworks.com
  • 5. Me - Product Developer
  • 6. My Current Product – eventrix.co
  • 11. Naomi Weast Actress, not a programmer https://plus.google.com/110657773112027365790/posts
  • 13. It reminds me of something else
  • 14. Jacques Carelman Artist, creator of “The Catalogue of Impossible Objects” in the 60s http://www.patakosmos.com/wp-content/uploads/2013/09/RDA00147250.jpg
  • 15. Coffee pot for masochists Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/coffeepot-for-masochists.html
  • 16. Absorbent Bottle Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/absorbent-bottle.html
  • 17. Siamese Hammers Catalogue of Impossible Objects by Jacques Carelman http://impossibleobjects.com/catalogue/siamese-hammers.html
  • 18. It reminds me of something I read in a book ...
  • 19. Donald A. Norman Author of “The Design of Everyday Things” http://www.jnd.org/NNg-Photographs/Photo1.jpg “It is the duty of machines and those who design them to understand people. It is not our duty to understand the arbitrary, meaningless dictates of machines.”
  • 20. User Centric Design Process by UXPA Revolution started by Donald A. Norman's book http://uxmastery.com/what-does-a-user-centred-design-process-look-like/
  • 21. Any design has a user. Who is the user of software design? Can't be the end user. Then: the developer => Developer-centric software design? DX? How about “Usable Software Design”?
  • 22. So how to apply UX techniques to software design? ● Personas ● User journey for developer ● Quality attributes ● Usability testing ● Specific practices
  • 24. Developer Persona For Your Team ● Kernel Developer ● Java Enterprise Developer ● Rails Developer ● C/C++ Embedded Developer ● Android Developer ● Front-end Javascript + html + CSS developer ● Etc. Each persona has different needs. Usability depends on the user!
  • 25. Example of Team Agreement Usable Software Design means to us that: 1. It is written for developers to read 2. It is easy to find where to modify the code 3. Any modification has a minimal ripple-effect 4. It is easy AND fast to validate that we did the right thing 5. We don’t have to do similar modifications in several places Usable Software Design – A Federating Concept by Johan Martinsson
  • 26. Next Step: Practices “It is written for developers to read” => coding guidelines, clean code etc. “It is easy to find where to modify the code” => navigability, consistency etc. “Any modification has a minimal ripple effect” => follow Open Closed Principle, Single Responsibility Principle etc.
  • 28. You Are The User: Changing Code ● Figure out what you need to change ● Navigate there ● Read the code, tests, documentation, comments ● Write/change code, write/change tests ● Refactor ● Build ● Validate ● Integrate
  • 29. Figure Out What To Change Static structure {}, Understand runtime behavior
  • 32. Is Your Design Easy to Navigate?
  • 33. Is Your Design Easy to Navigate? ● What module / namespace to look in? – See previous examples ● How is that thing named? – Should be Consistent, Memorable, Precise ● How deep is the inheritance tree?
  • 38. What is Usable Software Design? Usable Software Design is any code structure that exhibits design qualities similar to usability
  • 39. 5 Design Qualities of Usability 1. Learnability 2. Efficiency 3. Memorability 4. Errors 5. Satisfaction http://www.nngroup.com/articles/usability-101-introduction-to-usability/ How easy it is to accomplish basic tasks the first time you're using the design? How quickly can you perform a task once you've learned the design? When you go back to the design after a period of not using it, how easy is to become efficient again? How many errors do you make, how severe are they and how can you recover from them? How pleasant it is to use the design?
  • 40. 1. Learnability How easy is it for users to accomplish basic tasks the first time they encounter the design?
  • 41. Hints: Design For Learnability Code structure that shows what the application does Consistency Minimal Surprise Use Clearly Defined Modules With Clear APIs Readability / Clean Code Navigability Add Usage examples – tests / comments etc
  • 42. Test Learnability Measure how long it takes for developers outside your team to understand the purpose of a class with as little help as possible.
  • 43. 2. Efficiency Once users have learned the design, how quickly can they perform tasks?
  • 44. Hints: Design For Efficiency Use code constructs the whole team understands Consistency Fast Validation
  • 45. Test Efficiency Retro question: “what slowed you down in the past two weeks?” Measure how long it takes for developers to finish typical tasks (not simple, but typical)
  • 46. 3. Memorability When you go back to the design after a period of not using it, how easy is to become efficient again?
  • 47. Memorability ≈ Efficiency + Learnability
  • 48. 4. Errors How many errors do you make? How severe are these errors? How easily can they recover from the errors?
  • 49. Hints: Design For Mistake Proofing It's the system's fault Write automated tests Eliminate exceptions Pass mandatory arguments to constructor (more difficult when using Dependency Injection libraries) Avoid Primitive Obsession Principle of Minimum Surprise
  • 52. Test Mistake-Proofing How many bugs do we have? What is the main cause of the bugs? (remember, it's typically in the design) How can we change the design to avoid it?
  • 53. 5. Satisfaction How pleasant is it to use the design?
  • 54. Hints: Design For Satisfaction Strictly personal, but relevant
  • 55. Test Satisfaction What parts of the system are unpleasant to use? How can we change them to be more pleasant?
  • 57. How To Do Usability Testing ● Pick a few common tasks ● Ask a developer who is not part of the team but knows the technology to do them ● Gather the feedback ● Define next improvement actions
  • 59. I forgot to mention ● You are not allowed to start the application, only navigate through code
  • 60. Results ● First two tasks were too vague – Create new event, create new user => write a new feature? Create a domain entity? – The feature existed, I was hinting at just creating a domain entity and saving it from the code (no UI) – It showed an inconsistency in design ● Task 3 “Explain how an event is created in the application” took less than 5'
  • 61. ● Task 4 “Validation for event creation” took less than 5', but it was incomplete – Claudia missed the client-side validation because... – It was using custom tags extracted in a plugin that... – Required to run “grails refresh-dependencies” but... – It wasn't compiling because … – It was using a library that … – Needed compilation and publish to local maven ● Improvement: – Write a script “installDev” that installs everything needed for a new dev
  • 62. ● Task 5 “error management for event creation” – <5' – Correct answer
  • 63. ● Task 6 “Reset password flow” – Stopped after 15' – Got around the middle of the flow ● Conclusion – Difficult to follow a more complex flow through an application – Need some way to provide this information fast (work in progress)
  • 64. Open Questions ● What was your general impression of the design? – “very nice, easy to understand” ● What helped you understand? – “the names & the structure” ● What prevented you from understanding the reset password flow? – “difficult to follow”
  • 65. Usability Tests - Conclusions ● Usability tests are very useful for improving productivity ● Every time you take 1' more to understand the code, you are not implementing a new feature ● (If you finish a feature faster, you have more time to read Quora :D)
  • 67. Design Elements = Constrained Classes ● Constrained Classes = Higher Level design entities ● ~ design patterns (not quite)
  • 68. Design Elements – Example from eventrix.co ● Controller ● Command Object ● Application Service ● Database Service (Command) ● Database Query ● View Model
  • 69. Controller Responsibilities ● Delegate the operations on the request input ● Render the correct view / template / error Collaborators ● Command Objects ● Application Services ● View Models How To Test: Page Tests
  • 70. Command Object Responsibilities ● Validate the request ● Delegate update / delete operations Collaborators ● Database Services ● Database Queries How To Test: Unit Tests
  • 71. Application Service Responsibilities ● Complex logic ● Delegate all database operations Collaborators ● Database Services ● Database Queries How To Test: Unit Tests
  • 72. Database Service (Command) Responsibilities ● Update / delete database data Collaborators ● GORM subsystem How To Test: Integration Tests With Real Database
  • 73. Database Query Responsibilities ● Query database data Collaborators ● GORM subsystem How To Test: Integration Tests With Real Database
  • 74. View Model Responsibilities ● Transform GORM entities into maps ready for rendering ● ! Limit the data returned to the view ● ! Separate as much as possible Collaborators ● Domain Model classes How To Test: Unit Tests
  • 75. Design Elements Are Not Everything ● We discovered some more – e.g. multiple steps flow ● Utility classes
  • 76. But they are ~90% of the code ● Typical use cases: – Request to create / update / delete something: controller → command object → database command → view model → controller render – Request to read something: controller → application service / db query → view model → controller render
  • 78. What To Tell Managers Usable Software Design has the potential to bring four economical benefits: ● Faster integration of new developers in the team (learnability) ● Faster time to implement typical (not simple) tasks (efficiency) ● Making less mistakes (mistake-proofing) ● Feeling more motivated (satisfaction)
  • 79. Recap ● The developer is the user of software design ● Usable software design means code structure that exhibits the qualities of usability: Learnability, Efficiency, Memorability, Error Treatment and Satisfaction ● Define the personas of your team ● Create a team agreement ● Start applying practices that help the agreement ● Run usability tests ● Identify design elements from your code to increase consistency ● This is just the beginning
  • 81. Tell me about your experiences alex.bolboaca @mozaicworks.com @alexboly mozaicworks.com/blog alexbolboaca.ro https://www.linkedin.com/in/ alexandrubolboaca/
  • 82. Buy my book! Special price for you: https://leanpub.com/usablesoftwaredesign/c/thank-you-java-day-istanbul Pay as little as for two Turkish Pizzas
  • 83. Q&A “The important thing is not to stop questioning”