SlideShare a Scribd company logo
1 of 63
Download to read offline
Raising The Bar
Alex Bolboacă,  @alexboly,  alex.bolboaca@mozaicworks.com
October 2018
Intro
This talks is inspired by
Intersection #1: Software Design + UX = ?
Intersection #2: Other design disciplines + software design = ?
Intersection #3: Materials Science + Software Design = ???
Intersection #4: Maths + Software Design = ?
Intersection #5: Engineering + Software = ?
Intersection #6: Reaching out to scientists
Extra idea: How could development change fundamentally?
Intro
Software Craftsmanship Manifesto
10 years!
My Journey
• Software Craftsmanship
• First coderetreat outside US
• Many meetings
• Many travels to European communities
• I TAKE Unconference
• SoftDevGang
But that wasn’t enough for me
I’m a child of SciFi, born and raised in communist Romania
Raising the Bar
As aspiring Software Craftsmen we are raising the bar of profes-
sional software development by practicing it and helping others
learn the craft
What I heard
Innovation, Collaboration, Breaking Silos
So I’m very surprised to hear…
I’m Software Crafter, don’t want to hear about agile
I’m doing DevOps, not agile or software development
We want to scale agile, should we do SAFE or LESS?
I’m a CSM, CSPO, CSP, …
I’m interested in code, what relevance do Math / Physics / Human-
ities have ?
Everything is Connected
Connections
Intersectionality
What if we combine ideas from various domains with software development?
This talks is inspired by
David Hussman
David Hussman
Dude’s Law
Dude’s Law
Intersection #1: Software Design +
UX = ?
Usable Software Design
Who uses software designs? Developers (in agile sense, including
programmers, testers, ops, etc)
What if we apply UX techniques to inform our design decisions?
• Personas
• User journeys
• Usability tests
What is Usability?
Usability design qualities
By analogy, Usable Software Design helps
• Shorten the time from new developer to productive
• Reduce the number of mistakes the teams make
• Improve team motivation
• Improve team productivity
Result: The book
Intersection #2: Other design
disciplines + software design = ?
How do other designers build intuition and learn to design?
Never ever a single solution!
Design studies as part of software design education
Intersection #3: Materials Science +
Software Design = ???
Code is a Material we use for Prototyping
Is it a …
• Crystalline / non-crystalline Solid?
• Gas?
• Liquid?
• Plasma?
• Non-newtonian fluid?
• Something else?
Code as a “Physical” material
Forces:
• Change - add some more code, remove some code, modify some code
• Execution - pass some inputs, read the outputs
Constraint:
• Coherence - code runs and produces desirable results
Mechanical properties:
• Rigidity: unevenly distributed
Code is like ?
Weird type of plasticine?
Materials Science + Software Design = Some Equations and new approaches?
• Could we compute the rigidity distribution of code? Aka an integration
of coupling over the code topology ?
• Could we compute the effect of change on the rigidity distribution?
• Could we visualize the rigidity distribution?
• Could we interact with code through the plasticine-like view?
Result: ?
Who knows?
Intersection #4: Maths + Software
Design = ?
Maths is Fun!
1 + 2 + 3 + 4 + … = ?
Ramanujan extension to addition gives the result -1/12.
This is used in physics (eg. string theory).
Watch the video here: Mathologer: Ramanujan: Making sense of 1+2+3+… =
-1/12 and Co.
Maths is based on
Proofs
Theorems
Axioms
Standard of proof in software development is …
This has worked for a team
What is a program?
outputs = f(t, inputs)
Hypothesis
∀f(t, inputs)∃g1, g2, g3, ...s.th.f(t, inputs) = g1(t) ◦ g2(i1) ◦ g3(i2) ◦ ...
Biggest problem when refactoring legacy code?
Dependencies
Idea: Use Lambda calculus to refactor legacy code
1. Pick a region of code to refactor
2. Turn it into a big, ugly lambda through safe refactoring (aka separate
from state and dependencies)
3. Decompose the big ugly lambda into small nice lambdas
4. Reorganize lambdas into small objects based on cohesion or
duplication of parameters
Algorithm v2
From any code region to big, ugly lambda:
1. Pick a set of statements
2. Extract to a function
3. Make the function static and immutable
4. For each compilation error, either: replace state with parameters and
return values or extract another lambda
5. Simplify through currying, functional composition or lambda injection
Experimental result
// Groovy version of trivia legacy code base
private static pure_Roll(
final currentPlayerInPenaltyBoxFunction,
final printCurrentPlayerNameFunction,
final printRollFunction,
final isRollOddFunction,
final rollOddAndPlayerInPenaltyBoxFunction,
final playerInPenaltyBoxAndRollEvenFunction,
final playerNotInPenaltyBoxFunction
)
Source:
https://github.com/MozaicWorks/trivia/blob/decomposeLambdasTry2/
groovy/src/main/groovy/com/adaptionsoft/games/uglytrivia/Game.groovy
Experimental result: method body
printCurrentPlayerNameFunction()
printRollFunction()
if (currentPlayerInPenaltyBoxFunction()) {
if (isRollOddFunction()) {
return rollOddAndPlayerInPenaltyBoxFunction()
} else {
return playerInPenaltyBoxAndRollEvenFunction()
}
} else {
return playerNotInPenaltyBoxFunction()
}
More code
private static playerNotInPenaltyBox(
printNewLocationFunction,
printCurrentCategoryFunction,
askQuestionFunction,
final boolean isGettingOutOfPenaltyBox,
movePlayerFunction) {
printNewLocationFunction()
printCurrentCategoryFunction()
askQuestionFunction()
return [
isGettingOutOfPenaltyBox,
movePlayerFunction()
]
}
Maths + Legacy code = ?
• Can we create a method that is mathematically proven to maintain
code behavior?
• And simple enough to learn and apply with modern tools?
Intersection #5: Engineering +
Software = ?
Built-in self test
A built-in self-test (BIST) or built-in test (BIT) is a mechanism that
permits a machine to test itself. Engineers design BISTs to meet
requirements such as:
• high reliability
• lower repair cycle times
or constraints such as:
• limited technician accessibility
• cost of testing during manufacture
Source: Wikipedia
Software tests
src/…
test/…
Why not self-testable programs?
createUser -selfTest
Why not self-contained programs?
usage: createUser -[create|selfSetup|selfTest|selfCleanup]
-create,--create creates a user
-help,--help show usage information
-selfBackup,--self-backup backs up the database
-selfCleanup,--self-cleanup drops database and user
-selfRestore,--self-restore restores the last backup
-selfSetup,--self-setup creates database and user
-selfTest,--self-test runs self test
Source code: https://github.com/MozaicWorks/
SelfContainedProcessesAsMicroservicesDesignStudy
Built-in self test, setup, backup, restore + code = ?
• Psychological: No separation between operational needs and
“production” code
• Software engineering: All requirements taken into account, including
ops
• Technical: Little change
Intersection #6: Reaching out to
scientists
Problem
Scientific experiments with software development have weird results. Why?
Maybe access issue. Scientists can run experiments either on students, on
open source code bases, or in large companies.
Results don’t fit with software crafters, small / medium companies or
experienced developers.
Possible Solution
A CI plugin easy to install and with good default configuration that publishes
anonymous code-related metrics (without the code) to a public repository
accessible to scientists.
Extra idea: How could development
change fundamentally?
Fundamental difficulty of software development
Turning fuzzy needs and wants into very precise code
What if …
We define very precise requirements that are then fed into a machine to
generate the code
Extend the Turing machine?
Turing machine
If we remove all the other difficulties …
Imagine an ideal generation machine.
We turn the requirements into a very specific language:
Given ...
When ...
Then ...
We feed the machine with the requirements.
We get out generated code that matches the requirements.
Consequence: turning back time
Did you make a mistake in your requirements? No worries, plug in the
correct ones and get the right code out
Do you want to change something fundamental? No worries, same process
No more design mistakes, no more rigidity
How would the ideal generative machine work?
Intuitively:
• Generate more specialized tests from the given / when / then
• Use TDD cycles + Transformations to adjust the code
Is this even remotely possible?
I don’t know. Where to start?
Closing
Your turn
• Software development + biology = ?
• Software development + chemistry = ?
• Software development + quantum physics = ?
• Software development + art = ?
• Software development + writing = ?
• Software development + typography = ?
Start your workgroups!
Thank you!
Let’s raise the bar together!
I’ve been Alex Bolboacă, @alexboly, alex.bolboaca@mozaicworks.com
programmer, trainer, mentor, writer
at Mozaic Works
Think. Design. Work Smart.
50% off my books with the code LSCC
Usable Software Design: https://leanpub.com/usablesoftwaredesign/c/lscc
Coderetreat, Hosting and Facilitating:
https://leanpub.com/coderetreat/c/lscc
Q&A
Q&A

More Related Content

What's hot

DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for AndroidAhmed Misbah
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereDaniel Davis
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Zohirul Alam Tiemoon
 
Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications Ganesh Samarthyam
 
Agile Test Driven Development
Agile Test Driven DevelopmentAgile Test Driven Development
Agile Test Driven DevelopmentViraf Karai
 
Test Drive Development
Test Drive DevelopmentTest Drive Development
Test Drive Developmentsatya sudheer
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITALuca Minudel
 
Euro python 2015 writing quality code
Euro python 2015   writing quality codeEuro python 2015   writing quality code
Euro python 2015 writing quality coderadek_j
 
How does pair programming work?
How does pair programming work?How does pair programming work?
How does pair programming work?Ferdous Pathan
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Mohamed Taman
 
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, BucharestSandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, BucharestMozaic Works
 
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard WorkTaming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard WorkJoseph Yoder
 
Caring about Code Quality
Caring about Code QualityCaring about Code Quality
Caring about Code QualitySaltmarch Media
 
Pair programming and introduction to TDD
Pair programming and introduction to TDDPair programming and introduction to TDD
Pair programming and introduction to TDDArati Joshi
 
Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry  Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry Tharindu Weerasinghe
 
Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening Maven Logix
 

What's hot (20)

DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
 
Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
 
Code quality
Code quality Code quality
Code quality
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
 
Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications
 
Agile Test Driven Development
Agile Test Driven DevelopmentAgile Test Driven Development
Agile Test Driven Development
 
Test Drive Development
Test Drive DevelopmentTest Drive Development
Test Drive Development
 
(A)TDD The what, why and how
(A)TDD The what, why and how(A)TDD The what, why and how
(A)TDD The what, why and how
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
 
Euro python 2015 writing quality code
Euro python 2015   writing quality codeEuro python 2015   writing quality code
Euro python 2015 writing quality code
 
How does pair programming work?
How does pair programming work?How does pair programming work?
How does pair programming work?
 
tem7
tem7tem7
tem7
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.
 
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, BucharestSandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
 
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard WorkTaming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
 
Caring about Code Quality
Caring about Code QualityCaring about Code Quality
Caring about Code Quality
 
Pair programming and introduction to TDD
Pair programming and introduction to TDDPair programming and introduction to TDD
Pair programming and introduction to TDD
 
Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry  Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry
 
Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening
 

Similar to Raising the Bar

TDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - OpensouthcodeTDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - OpensouthcodeNacho Cougil
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)Nacho Cougil
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)ssusercaf6c1
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)Nacho Cougil
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekNacho Cougil
 
Transferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTransferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTao Xie
 
Prashant technical practices-tdd for xebia event
Prashant   technical practices-tdd for xebia eventPrashant   technical practices-tdd for xebia event
Prashant technical practices-tdd for xebia eventXebia India
 
Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategiesRaquel Pau
 
2014 01-ticosa
2014 01-ticosa2014 01-ticosa
2014 01-ticosaPharo
 
Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Developmentbsadd
 
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.5SSW
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsShafiul Azam Chowdhury
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answersHopeTutors1
 
Agile Development Ultimate Slides
Agile Development Ultimate SlidesAgile Development Ultimate Slides
Agile Development Ultimate Slidesgilashikwa
 
Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015Steve Mercier
 
iOS Development at Scale @Chegg
iOS Development at Scale @CheggiOS Development at Scale @Chegg
iOS Development at Scale @CheggGalOrlanczyk
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Mirco Hering
 

Similar to Raising the Bar (20)

TDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - OpensouthcodeTDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - Opensouthcode
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)
 
Debugging
DebuggingDebugging
Debugging
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech Week
 
Transferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTransferring Software Testing Tools to Practice
Transferring Software Testing Tools to Practice
 
Prashant technical practices-tdd for xebia event
Prashant   technical practices-tdd for xebia eventPrashant   technical practices-tdd for xebia event
Prashant technical practices-tdd for xebia event
 
From open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysferaFrom open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysfera
 
Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategies
 
2014 01-ticosa
2014 01-ticosa2014 01-ticosa
2014 01-ticosa
 
Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Development
 
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
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
Agile Development Ultimate Slides
Agile Development Ultimate SlidesAgile Development Ultimate Slides
Agile Development Ultimate Slides
 
Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015
 
iOS Development at Scale @Chegg
iOS Development at Scale @CheggiOS Development at Scale @Chegg
iOS Development at Scale @Chegg
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015
 
BDD Primer
BDD PrimerBDD Primer
BDD Primer
 

More from 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
 
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
 
Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
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

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 

Recently uploaded (20)

Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 

Raising the Bar

  • 1. Raising The Bar Alex Bolboacă,  @alexboly,  alex.bolboaca@mozaicworks.com October 2018
  • 2. Intro This talks is inspired by Intersection #1: Software Design + UX = ? Intersection #2: Other design disciplines + software design = ? Intersection #3: Materials Science + Software Design = ??? Intersection #4: Maths + Software Design = ? Intersection #5: Engineering + Software = ? Intersection #6: Reaching out to scientists Extra idea: How could development change fundamentally?
  • 5. My Journey • Software Craftsmanship • First coderetreat outside US • Many meetings • Many travels to European communities • I TAKE Unconference • SoftDevGang
  • 6. But that wasn’t enough for me I’m a child of SciFi, born and raised in communist Romania
  • 7. Raising the Bar As aspiring Software Craftsmen we are raising the bar of profes- sional software development by practicing it and helping others learn the craft
  • 8. What I heard Innovation, Collaboration, Breaking Silos
  • 9. So I’m very surprised to hear… I’m Software Crafter, don’t want to hear about agile I’m doing DevOps, not agile or software development We want to scale agile, should we do SAFE or LESS? I’m a CSM, CSPO, CSP, … I’m interested in code, what relevance do Math / Physics / Human- ities have ?
  • 11. Intersectionality What if we combine ideas from various domains with software development?
  • 12. This talks is inspired by
  • 15. Intersection #1: Software Design + UX = ?
  • 16. Usable Software Design Who uses software designs? Developers (in agile sense, including programmers, testers, ops, etc) What if we apply UX techniques to inform our design decisions? • Personas • User journeys • Usability tests
  • 17. What is Usability? Usability design qualities
  • 18. By analogy, Usable Software Design helps • Shorten the time from new developer to productive • Reduce the number of mistakes the teams make • Improve team motivation • Improve team productivity
  • 20. Intersection #2: Other design disciplines + software design = ?
  • 21. How do other designers build intuition and learn to design? Never ever a single solution!
  • 22. Design studies as part of software design education
  • 23. Intersection #3: Materials Science + Software Design = ???
  • 24. Code is a Material we use for Prototyping Is it a … • Crystalline / non-crystalline Solid? • Gas? • Liquid? • Plasma? • Non-newtonian fluid? • Something else?
  • 25. Code as a “Physical” material Forces: • Change - add some more code, remove some code, modify some code • Execution - pass some inputs, read the outputs Constraint: • Coherence - code runs and produces desirable results Mechanical properties: • Rigidity: unevenly distributed
  • 26. Code is like ? Weird type of plasticine?
  • 27. Materials Science + Software Design = Some Equations and new approaches? • Could we compute the rigidity distribution of code? Aka an integration of coupling over the code topology ? • Could we compute the effect of change on the rigidity distribution? • Could we visualize the rigidity distribution? • Could we interact with code through the plasticine-like view?
  • 29. Intersection #4: Maths + Software Design = ?
  • 30. Maths is Fun! 1 + 2 + 3 + 4 + … = ? Ramanujan extension to addition gives the result -1/12. This is used in physics (eg. string theory). Watch the video here: Mathologer: Ramanujan: Making sense of 1+2+3+… = -1/12 and Co.
  • 31. Maths is based on Proofs Theorems Axioms
  • 32. Standard of proof in software development is … This has worked for a team
  • 33. What is a program? outputs = f(t, inputs)
  • 34. Hypothesis ∀f(t, inputs)∃g1, g2, g3, ...s.th.f(t, inputs) = g1(t) ◦ g2(i1) ◦ g3(i2) ◦ ...
  • 35. Biggest problem when refactoring legacy code? Dependencies
  • 36. Idea: Use Lambda calculus to refactor legacy code 1. Pick a region of code to refactor 2. Turn it into a big, ugly lambda through safe refactoring (aka separate from state and dependencies) 3. Decompose the big ugly lambda into small nice lambdas 4. Reorganize lambdas into small objects based on cohesion or duplication of parameters
  • 37. Algorithm v2 From any code region to big, ugly lambda: 1. Pick a set of statements 2. Extract to a function 3. Make the function static and immutable 4. For each compilation error, either: replace state with parameters and return values or extract another lambda 5. Simplify through currying, functional composition or lambda injection
  • 38. Experimental result // Groovy version of trivia legacy code base private static pure_Roll( final currentPlayerInPenaltyBoxFunction, final printCurrentPlayerNameFunction, final printRollFunction, final isRollOddFunction, final rollOddAndPlayerInPenaltyBoxFunction, final playerInPenaltyBoxAndRollEvenFunction, final playerNotInPenaltyBoxFunction ) Source: https://github.com/MozaicWorks/trivia/blob/decomposeLambdasTry2/ groovy/src/main/groovy/com/adaptionsoft/games/uglytrivia/Game.groovy
  • 39. Experimental result: method body printCurrentPlayerNameFunction() printRollFunction() if (currentPlayerInPenaltyBoxFunction()) { if (isRollOddFunction()) { return rollOddAndPlayerInPenaltyBoxFunction() } else { return playerInPenaltyBoxAndRollEvenFunction() } } else { return playerNotInPenaltyBoxFunction() }
  • 40. More code private static playerNotInPenaltyBox( printNewLocationFunction, printCurrentCategoryFunction, askQuestionFunction, final boolean isGettingOutOfPenaltyBox, movePlayerFunction) { printNewLocationFunction() printCurrentCategoryFunction() askQuestionFunction() return [ isGettingOutOfPenaltyBox, movePlayerFunction() ] }
  • 41. Maths + Legacy code = ? • Can we create a method that is mathematically proven to maintain code behavior? • And simple enough to learn and apply with modern tools?
  • 43. Built-in self test A built-in self-test (BIST) or built-in test (BIT) is a mechanism that permits a machine to test itself. Engineers design BISTs to meet requirements such as: • high reliability • lower repair cycle times or constraints such as: • limited technician accessibility • cost of testing during manufacture Source: Wikipedia
  • 45. Why not self-testable programs? createUser -selfTest
  • 46. Why not self-contained programs? usage: createUser -[create|selfSetup|selfTest|selfCleanup] -create,--create creates a user -help,--help show usage information -selfBackup,--self-backup backs up the database -selfCleanup,--self-cleanup drops database and user -selfRestore,--self-restore restores the last backup -selfSetup,--self-setup creates database and user -selfTest,--self-test runs self test Source code: https://github.com/MozaicWorks/ SelfContainedProcessesAsMicroservicesDesignStudy
  • 47. Built-in self test, setup, backup, restore + code = ? • Psychological: No separation between operational needs and “production” code • Software engineering: All requirements taken into account, including ops • Technical: Little change
  • 48. Intersection #6: Reaching out to scientists
  • 49. Problem Scientific experiments with software development have weird results. Why? Maybe access issue. Scientists can run experiments either on students, on open source code bases, or in large companies. Results don’t fit with software crafters, small / medium companies or experienced developers.
  • 50. Possible Solution A CI plugin easy to install and with good default configuration that publishes anonymous code-related metrics (without the code) to a public repository accessible to scientists.
  • 51. Extra idea: How could development change fundamentally?
  • 52. Fundamental difficulty of software development Turning fuzzy needs and wants into very precise code
  • 53. What if … We define very precise requirements that are then fed into a machine to generate the code
  • 54. Extend the Turing machine? Turing machine
  • 55. If we remove all the other difficulties … Imagine an ideal generation machine. We turn the requirements into a very specific language: Given ... When ... Then ... We feed the machine with the requirements. We get out generated code that matches the requirements.
  • 56. Consequence: turning back time Did you make a mistake in your requirements? No worries, plug in the correct ones and get the right code out Do you want to change something fundamental? No worries, same process No more design mistakes, no more rigidity
  • 57. How would the ideal generative machine work? Intuitively: • Generate more specialized tests from the given / when / then • Use TDD cycles + Transformations to adjust the code
  • 58. Is this even remotely possible? I don’t know. Where to start?
  • 60. Your turn • Software development + biology = ? • Software development + chemistry = ? • Software development + quantum physics = ? • Software development + art = ? • Software development + writing = ? • Software development + typography = ? Start your workgroups!
  • 61. Thank you! Let’s raise the bar together! I’ve been Alex Bolboacă, @alexboly, alex.bolboaca@mozaicworks.com programmer, trainer, mentor, writer at Mozaic Works Think. Design. Work Smart.
  • 62. 50% off my books with the code LSCC Usable Software Design: https://leanpub.com/usablesoftwaredesign/c/lscc Coderetreat, Hosting and Facilitating: https://leanpub.com/coderetreat/c/lscc