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

eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...OnePlan Solutions
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Rob Geurden
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdfAndrey Devyatkin
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 

Recently uploaded (20)

eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
Tech Tuesday Slides - Introduction to Project Management with OnePlan's Work ...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...Simplifying Microservices & Apps - The art of effortless development - Meetup...
Simplifying Microservices & Apps - The art of effortless development - Meetup...
 
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
2024-04-09 - From Complexity to Clarity - AWS Summit AMS.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 

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