SlideShare a Scribd company logo
1 of 29
Clean Code
Increase your agility through higher
quality software
Eric Reichwaldt
Performance Team Lead
Communication – Restorative – Strategic – Responsibility – Futuristic
@shyftsolutions #nebrcode
Intro
@shyftsolutions #nebrcode
“We are uncovering better ways of developing software by doing it and helping others
do it. Through this work we have come to value:”
Agile Manifesto
Individuals and Interactions
Working Software
Customer Collaboration
Responding to Change
Processes and Tools
Comprehensive Documentation
Contract Negotiation
Following a Plan
over
over
over
over
“That is, while there is value in the items on the right,
we value the items on the left more” - February
2001
@shyftsolutions #nebrcode
Agile Principles
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
Welcome changing requirements, even late in
development. Agile processes harness change for
the customer's competitive advantage.
Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.
Business people and developers must work
together daily throughout the project.
Build projects around motivated individuals.
Give them the environment and support they
need,
and trust them to get the job done.
The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.
Continuous attention to technical excellence
and good design enhances agility.
Simplicity--the art of maximizing the amount
of work not done--is essential.
The best architectures, requirements, and designs
emerge from self-organizing teams.
At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly.
@shyftsolutions #nebrcode
Agile Principles
Our highest priority is to satisfy the customer
through early and continuous delivery
of valuable software.
Welcome changing requirements, even late in
development. Agile processes harness change for
the customer's competitive advantage.
Deliver working software frequently, from a
couple of weeks to a couple of months, with a
preference to the shorter timescale.
Business people and developers must work
together daily throughout the project.
Build projects around motivated individuals.
Give them the environment and support they
need,
and trust them to get the job done.
The most efficient and effective method of
conveying information to and within a development
team is face-to-face conversation.
Working software is the primary measure of progress.
Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.
Continuous attention to technical excellence
and good design enhances agility.
Simplicity--the art of maximizing the amount
of work not done--is essential.
The best architectures, requirements, and designs
emerge from self-organizing teams.
At regular intervals, the team reflects on how
to become more effective, then tunes and adjusts
its behavior accordingly.
Self-Organizing Teams Exercise
@shyftsolutions #nebrcode
Engineering
It is commonly understood, even expected,
that these professions have rigorous
standards and testing in their engineering
@shyftsolutions #nebrcode
Engineering
So why don’t we?…
@shyftsolutions #nebrcode
“We've seen clean, functional systems
deteriorate pretty quickly once windows start
breaking. There are other factors that can
contribute to software rot…, but neglect
accelerates the rot faster than any other
factor.” - The Pragmatic Programmer
Broken Windows
“Maybe we should be sweating the small stuff.”
@shyftsolutions #nebrcode
Build a Solid Foundation
• Single Responsibility Principle
• Open/Closed Principle
• Liskov Substitution Principle
• Interface Segregation Principle
• Dependency Inversion Principle
SOLID Design Principles
@shyftsolutions #nebrcode
Definition of Done
@shyftsolutions #nebrcode
Definition of Done
@shyftsolutions #nebrcode
No one can accurately estimate time for software
Build it the right-way not the fast-way
Aim for approximately right, not precisely wrong
Impatience is driven by uncertainty
Delay decisions until the last responsible moment
Time
Multi-Tasking Exercise
@shyftsolutions #nebrcode
100
40
20
10
40
20
10
20
10
10
20
40
60
1 PROJECT 2 PROJECTS 3 PROJECTS 4 PROJECTS
PERCENTAGEOFTIME
PRODUCTIVITY LOSS TO CONTEXT SWITCHING
Project A Project B Project C Project D Context Switching
Multi-Tasking
Weinberg, G. M. (1997). Quality software management. New York: Dorset House Pub.
“Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.”
– Martin Fowler 2008
#include <sys/ioctl.h> #include <unistd.h> #include <string.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #define O_o
"sfX4.Fv8H!`uf" "|~0y'vWtA@:LcO9d}y.!uL!Gd+ml(<+Ds!J" "e.6!r!%l6G!n~^<i=%pEwL%P!'<!FQt%u 5toG57j/3"
"!:E%;!ea!!!WqE0z!f/y}!%!!Qi6!uzt!n}?]!bl!ak!SetR<" "Zj$x!~V!n&g8!cK! KrgR'8@c]!%-q9V.3fa[E8X%dY'w!#H <P~6" "?guhljL!^P% ?"
"8!@dP,!!o+fb" "!pv!;!Hm%Ro4" "n:}nkD!Q!kN" "e:| 'b5sc!e" /* nothing */ #define mu(a) a a a a a //- #define O_(Q_ ) "033[" #Q_
#define Q_(O) mu(mu(mu(O))) #define Q/*-- ++--*/O9--||( #define main( )main(){/**/ signal(13,1), _();}f()//--+ #define k( k) getenv(
"D"#k char*O0=O_o,OO,*Q1,O5[97];int*Q5,_Q=0,Q0=0,_O=0,_0=0,O=5,QQ,O6,Q6,O3 ,Q4,O4=41088,O1=sizeof(O5),O7=234;long long
__;_()Q_({)int*Q3,Q2,O2,C, QO,O9=O,O8=!!!!!!!!!!k(RAFT));long long Q8;char*Q9=O_(1A)O_(%dB)O_(%dC
)O_(34m)"xe2%c%crn"O_(0m)O_(%dA),*Q7;__+=(__*92+*O0-35-__)*(QO=Q_(! !)(*O0-33)*!O9--),O0+=O1*QO,QO&&_(),Q Q4&&(O--
,_(),O0+=194,O++,Q4--,_( ))),Q O=0,__=0,_(),O=3,_()),Q __&&(C=__&15,_O+=(C<2)*12+!(QO=C&14^2)*( 4-_O)+(C==6)*( 12-2*_O)+(C>6)*(9-(C-
7)%3),_Q+=!QO*(_Q%QQ+(C&1)*O3-_Q), _0+=!_0*!QO+(1-2*_0)*!(C^4),(C==5)&&(__>>=4,Q8=__,Q7=O0,Q4=__&15,O=1,_ ()|O ++&_(),__=Q8 ,O0=Q7
),Q3=( _Q+= O8*(9 *O4* O1 > lrand48()) +(_O%=8,( (_O% 6>2) -(_O% 7<2) )*QQ+((_O +7)%8<3 )-(_O>4) )*( C>5 ), Q2 = _Q/ O3)* O6+Q5
+(O2=_Q%QQ )/ 2,*Q3=* Q3 % O4+O4|(1 << Q_("" "@CADBEHI") [_Q%2+_Q %O3/ QQ*2 ]- 64)* _0, sprintf(O5, Q9, Q2+1, O2/2 ,*Q3>>8 ,85* 3&*
Q3,Q2+1 )&& _0&&(O=8, Q1 = O5,_()), Q0 +=(O2 >Q0)*_0*(O2 -Q0 ),__ +=!( C>9)*(3- __+ ( __>>4))-3, __ +=(C>12 ) *( (__<<4 )+ C-3-__)
,usleep( O4* _0/(3* O8+1 )),O =3,_() )) ,!O9 --&& read( 1 ,& OO,1)> 0&&(O= (QO=OO ==35 )*3+6 ,_()
,QO&&(OO=10,O=6,_(),1)||(O=4,_()),0)||close(dup2(3-dup2(1,dup(0)-3),1) *0+2)*0||Q write(1,"> ",2),ioctl(Q0=0,TIOCGWINSZ,O5)^--
O&(O3=(QQ=(O6=* ((short*)O5+1))*2)*4),Q6=-O1,Q5=calloc(3*O6,8),_()),Q (O=8,QO=!(O2=OO- 10)|!(Q2=OO-
32)*(Q0+58>QQ)|(Q0+12>QQ))&&(Q1=O_(3B),_(),write(1,"> ",2) ),Q0+=!QO*!Q2*4-QO*Q0,O2*Q2&&(!Q0&&(memset(Q5,0,3*O3),Q0=4,Q1="nnn"
O_(3A),_()),O=7,_Q=7*QQ+Q0+2,_O=_0=0,OO+=(OO>64 &OO<91)*32,O0=Q_(O_o)+ O7,_(),(*O0-OO)||(O=2,O0+='a',_( )))),Q *O0-OO)&&(*(O0+=O1)-
33)&&(O=0, _(),O=7,O0+=O1,_()),Q write(0,Q1,strlen(Q1))),Q OO=Q_(O_o)[Q6+=O1],(Q6 %strlen(O_o)-O7)&&(O=6,_(),O=9,_()));Q_(})/*+++++
IOCCC 2015 +++++*/ main() { puts("hello world!"); }
@shyftsolutions #nebrcode
Extreme Programming
• The customer is always available
• Code must be written to agreed standards
• Code the unit test first
• All production code is pair programmed
• Only one pair integrates code at a time
• Integrate often
• Set up a dedicated integration computer
• Use collective ownership
Support Systems
@shyftsolutions #nebrcode
Collaboration
@shyftsolutions #nebrcode
Communication
The perfect solution for our clients
@shyftsolutions #nebrcode
Communication
Toss it over the fence
@shyftsolutions #nebrcode
Communication
Monthly Status Reports
@shyftsolutions #nebrcode
Communication
Daily stand-ups, sprint
reviews, customer
interaction
@shyftsolutions #nebrcode
Communication
Every conversation is a chance to get feedback and adjust aim
The more frequent the conversations, the less time needed
All time spent off of the shortest path is waste
<<Spoilers>>The target doesn’t sit still!!
@shyftsolutions #nebrcode
Not about when, but how
TDD
Red
Green
Refactor
@shyftsolutions #nebrcode
TDD
What about a strike? A spare?...
@shyftsolutions #nebrcode
Focus shifts to readability and standards
Creates a shared mental-model
Pair Programming
0
1
2
3
4
5
6
7
NumberofDays
Individual Pair
Individual 5.81 3.25 2.52 2.05 1.63 1.31 1.18 1.17
Pair 3.13 2.08 1.76 1.62 1.56 1.43 1.41 1.37
Singles Pairs
Elapsed time (min) 42.60 30.20
Readability score (0-2) 1.40 2.00
Functionality score (0-6) 4.20 5.60
@shyftsolutions #nebrcode
A modest proposal
i. Pair up
ii. Work on design and algorithm and identify patterns of
logic
iii. Code and test sub-programs in pair programming
iv. Split up to code anything that is similar to other sub-
programs already paired on
v. Pair up again
vi. Review and perform integration tests
vii. Go back to step (ii) until completion of assignments
Pair Programming
0
1
2
3
4
5
6
7
NumberofDays
Individual Pair
Individual 5.81 3.25 2.52 2.05 1.63 1.31 1.18 1.17
Pair 3.13 2.08 1.76 1.62 1.56 1.43 1.41 1.37
Agility in Software
It starts with a commitment to do things better…
It grows by holding each other to higher standards
@shyftsolutions #nebrcode
Books
• Martin, R. C., Feathers, M. C., Ottinger,T. R., Langr, J. J., Schuchert, B. L., Grenning, J.W., &
Wampler, K. D. (2015). Clean code: a handbook of agile software craftsmanship. Upper Saddle
River, N.J: Prentice Hall.
• Martin, R. C. (2014). Agile software development: principles, patterns, and practices. Harlow,
UK: Pearson.
Websites
• https://pragprog.com/the-pragmatic-programmer/extracts/software-entropy
• https://www.ted.com/talks/rory_sutherland_perspective_is_everything?language=en
References

More Related Content

What's hot

Successful writing at work copyright 2017 cengage learn
Successful writing at work copyright 2017 cengage learnSuccessful writing at work copyright 2017 cengage learn
Successful writing at work copyright 2017 cengage learnssusere73ce3
 
PRINCE2 is dead! Long live Agile!
PRINCE2 is dead! Long live Agile!PRINCE2 is dead! Long live Agile!
PRINCE2 is dead! Long live Agile!Andy Barker
 
How DevOps is Transforming IT, and What it Can Do for Academia
How DevOps is Transforming IT, and What it Can Do for AcademiaHow DevOps is Transforming IT, and What it Can Do for Academia
How DevOps is Transforming IT, and What it Can Do for AcademiaNicole Forsgren
 
Soaring in the Clouds - Don't be dragged down by ITIL bloat!
Soaring in the Clouds - Don't be dragged down by ITIL bloat! Soaring in the Clouds - Don't be dragged down by ITIL bloat!
Soaring in the Clouds - Don't be dragged down by ITIL bloat! Navvia
 
DOES 2016 Sciencing the Crap Out of DevOps
DOES 2016 Sciencing the Crap Out of DevOpsDOES 2016 Sciencing the Crap Out of DevOps
DOES 2016 Sciencing the Crap Out of DevOpsNicole Forsgren
 
The Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
The Latest in DevOps: Elite Performance, Productivity, and Scaling - GoogleThe Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
The Latest in DevOps: Elite Performance, Productivity, and Scaling - GoogleMarilyne Huret
 
Seven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersSeven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersTechWell
 
Improving software quality for the future of connected vehicles
Improving software quality for the future of connected vehiclesImproving software quality for the future of connected vehicles
Improving software quality for the future of connected vehiclesDevon Bleibtrey
 
How Metrics Make Your DevOps Awesome
How Metrics Make Your DevOps AwesomeHow Metrics Make Your DevOps Awesome
How Metrics Make Your DevOps AwesomeNicole Forsgren
 
Goody bag ghc design thinking tools
Goody bag ghc design thinking toolsGoody bag ghc design thinking tools
Goody bag ghc design thinking toolsAliza Carpio
 
Software development management slides by George Berkowski (Hailo)
Software development management slides by George Berkowski (Hailo)Software development management slides by George Berkowski (Hailo)
Software development management slides by George Berkowski (Hailo)MiniBar
 
What I learned from 5 years of sciencing the crap out of DevOps
What I learned from 5 years of sciencing the crap out of DevOpsWhat I learned from 5 years of sciencing the crap out of DevOps
What I learned from 5 years of sciencing the crap out of DevOpsDevOpsDays DFW
 
Tui the phoenix project book review
Tui the phoenix project book reviewTui the phoenix project book review
Tui the phoenix project book reviewRudiger Wolf
 
Introducing Agile Methodologies
Introducing Agile MethodologiesIntroducing Agile Methodologies
Introducing Agile MethodologiesStfalcon Meetups
 
Agility reboot ii
Agility reboot iiAgility reboot ii
Agility reboot iiAndrew Chum
 
How we Roll: engineering organisation at HouseTrip
How we Roll: engineering organisation at HouseTripHow we Roll: engineering organisation at HouseTrip
How we Roll: engineering organisation at HouseTripmezis
 
Seven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersSeven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersTechWell
 
AgileMidwest2018-Erickson-PowerOfRetrospective
AgileMidwest2018-Erickson-PowerOfRetrospectiveAgileMidwest2018-Erickson-PowerOfRetrospective
AgileMidwest2018-Erickson-PowerOfRetrospectiveJason Tice
 

What's hot (20)

Successful writing at work copyright 2017 cengage learn
Successful writing at work copyright 2017 cengage learnSuccessful writing at work copyright 2017 cengage learn
Successful writing at work copyright 2017 cengage learn
 
PRINCE2 is dead! Long live Agile!
PRINCE2 is dead! Long live Agile!PRINCE2 is dead! Long live Agile!
PRINCE2 is dead! Long live Agile!
 
How DevOps is Transforming IT, and What it Can Do for Academia
How DevOps is Transforming IT, and What it Can Do for AcademiaHow DevOps is Transforming IT, and What it Can Do for Academia
How DevOps is Transforming IT, and What it Can Do for Academia
 
Soaring in the Clouds - Don't be dragged down by ITIL bloat!
Soaring in the Clouds - Don't be dragged down by ITIL bloat! Soaring in the Clouds - Don't be dragged down by ITIL bloat!
Soaring in the Clouds - Don't be dragged down by ITIL bloat!
 
DOES 2016 Sciencing the Crap Out of DevOps
DOES 2016 Sciencing the Crap Out of DevOpsDOES 2016 Sciencing the Crap Out of DevOps
DOES 2016 Sciencing the Crap Out of DevOps
 
The Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
The Latest in DevOps: Elite Performance, Productivity, and Scaling - GoogleThe Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
The Latest in DevOps: Elite Performance, Productivity, and Scaling - Google
 
Seven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersSeven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software Managers
 
Improving software quality for the future of connected vehicles
Improving software quality for the future of connected vehiclesImproving software quality for the future of connected vehicles
Improving software quality for the future of connected vehicles
 
How Metrics Make Your DevOps Awesome
How Metrics Make Your DevOps AwesomeHow Metrics Make Your DevOps Awesome
How Metrics Make Your DevOps Awesome
 
Goody bag ghc design thinking tools
Goody bag ghc design thinking toolsGoody bag ghc design thinking tools
Goody bag ghc design thinking tools
 
Software development management slides by George Berkowski (Hailo)
Software development management slides by George Berkowski (Hailo)Software development management slides by George Berkowski (Hailo)
Software development management slides by George Berkowski (Hailo)
 
What I learned from 5 years of sciencing the crap out of DevOps
What I learned from 5 years of sciencing the crap out of DevOpsWhat I learned from 5 years of sciencing the crap out of DevOps
What I learned from 5 years of sciencing the crap out of DevOps
 
Sdlc to agile transtion
Sdlc to agile transtion Sdlc to agile transtion
Sdlc to agile transtion
 
Tui the phoenix project book review
Tui the phoenix project book reviewTui the phoenix project book review
Tui the phoenix project book review
 
Introducing Agile Methodologies
Introducing Agile MethodologiesIntroducing Agile Methodologies
Introducing Agile Methodologies
 
Agility reboot ii
Agility reboot iiAgility reboot ii
Agility reboot ii
 
How we Roll: engineering organisation at HouseTrip
How we Roll: engineering organisation at HouseTripHow we Roll: engineering organisation at HouseTrip
How we Roll: engineering organisation at HouseTrip
 
Seven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software ManagersSeven Deadly Habits of Dysfunctional Software Managers
Seven Deadly Habits of Dysfunctional Software Managers
 
AgileMidwest2018-Erickson-PowerOfRetrospective
AgileMidwest2018-Erickson-PowerOfRetrospectiveAgileMidwest2018-Erickson-PowerOfRetrospective
AgileMidwest2018-Erickson-PowerOfRetrospective
 
DevOps practices
DevOps practicesDevOps practices
DevOps practices
 

Similar to Clean Code - Increase your agility through higher quality software

Agile and management why all the pain
Agile and management   why all the painAgile and management   why all the pain
Agile and management why all the painJoe Lukan
 
Heart of agile by Pierre Hervouet
Heart of agile by Pierre HervouetHeart of agile by Pierre Hervouet
Heart of agile by Pierre HervouetAgile ME
 
ASAS 2015 - Benito de Miranda
ASAS 2015 - Benito de MirandaASAS 2015 - Benito de Miranda
ASAS 2015 - Benito de MirandaAvisi B.V.
 
recapitulando: de métodos ágeis até lean startup
recapitulando: de métodos ágeis até lean startuprecapitulando: de métodos ágeis até lean startup
recapitulando: de métodos ágeis até lean startupPedro Axelrud
 
Introduction to agile
Introduction to agileIntroduction to agile
Introduction to agileunruliness
 
Pourquoi l'agile c'est absurde
Pourquoi l'agile c'est absurdePourquoi l'agile c'est absurde
Pourquoi l'agile c'est absurdePierre E. NEIS
 
Introduction to agile
Introduction to agileIntroduction to agile
Introduction to agileunruliness
 
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 NakovSvetlin Nakov
 
Finding balance of DDD while your application grows
Finding balance of DDD while your application growsFinding balance of DDD while your application grows
Finding balance of DDD while your application growsCarolina Karklis
 
Agile software development
Agile software development Agile software development
Agile software development saurabh goel
 
Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Mediotype .
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingUtkarsh Khare
 
Heart of Agile: What is Agile?
Heart of Agile: What is Agile?Heart of Agile: What is Agile?
Heart of Agile: What is Agile?Agile Tour Beirut
 

Similar to Clean Code - Increase your agility through higher quality software (20)

ALTNET
ALTNETALTNET
ALTNET
 
Agile and management why all the pain
Agile and management   why all the painAgile and management   why all the pain
Agile and management why all the pain
 
Heart of agile by Pierre Hervouet
Heart of agile by Pierre HervouetHeart of agile by Pierre Hervouet
Heart of agile by Pierre Hervouet
 
ASAS 2015 - Benito de Miranda
ASAS 2015 - Benito de MirandaASAS 2015 - Benito de Miranda
ASAS 2015 - Benito de Miranda
 
recapitulando: de métodos ágeis até lean startup
recapitulando: de métodos ágeis até lean startuprecapitulando: de métodos ágeis até lean startup
recapitulando: de métodos ágeis até lean startup
 
Introduction to agile
Introduction to agileIntroduction to agile
Introduction to agile
 
Starting with Agile
Starting with AgileStarting with Agile
Starting with Agile
 
Pourquoi l'agile c'est absurde
Pourquoi l'agile c'est absurdePourquoi l'agile c'est absurde
Pourquoi l'agile c'est absurde
 
Introduction to agile
Introduction to agileIntroduction to agile
Introduction to agile
 
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
 
Finding balance of DDD while your application grows
Finding balance of DDD while your application growsFinding balance of DDD while your application grows
Finding balance of DDD while your application grows
 
Agile principles
Agile principlesAgile principles
Agile principles
 
Agile 101
Agile 101 Agile 101
Agile 101
 
Agile software development
Agile software development Agile software development
Agile software development
 
Poor Man's Kanban
Poor Man's KanbanPoor Man's Kanban
Poor Man's Kanban
 
Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?Agile manifesto - Agile - What is it?
Agile manifesto - Agile - What is it?
 
Agile Methodologies And Extreme Programming
Agile Methodologies And Extreme ProgrammingAgile Methodologies And Extreme Programming
Agile Methodologies And Extreme Programming
 
Heart of Agile
Heart of AgileHeart of Agile
Heart of Agile
 
Heart of Agile: What is Agile?
Heart of Agile: What is Agile?Heart of Agile: What is Agile?
Heart of Agile: What is Agile?
 
DevOps Explained
DevOps ExplainedDevOps Explained
DevOps Explained
 

Recently uploaded

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Recently uploaded (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

Clean Code - Increase your agility through higher quality software

  • 1. Clean Code Increase your agility through higher quality software Eric Reichwaldt Performance Team Lead Communication – Restorative – Strategic – Responsibility – Futuristic
  • 3. @shyftsolutions #nebrcode “We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:” Agile Manifesto Individuals and Interactions Working Software Customer Collaboration Responding to Change Processes and Tools Comprehensive Documentation Contract Negotiation Following a Plan over over over over “That is, while there is value in the items on the right, we value the items on the left more” - February 2001
  • 4. @shyftsolutions #nebrcode Agile Principles Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. Business people and developers must work together daily throughout the project. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. Working software is the primary measure of progress. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. Continuous attention to technical excellence and good design enhances agility. Simplicity--the art of maximizing the amount of work not done--is essential. The best architectures, requirements, and designs emerge from self-organizing teams. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
  • 5. @shyftsolutions #nebrcode Agile Principles Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. Business people and developers must work together daily throughout the project. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. Working software is the primary measure of progress. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. Continuous attention to technical excellence and good design enhances agility. Simplicity--the art of maximizing the amount of work not done--is essential. The best architectures, requirements, and designs emerge from self-organizing teams. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
  • 7. @shyftsolutions #nebrcode Engineering It is commonly understood, even expected, that these professions have rigorous standards and testing in their engineering
  • 9. @shyftsolutions #nebrcode “We've seen clean, functional systems deteriorate pretty quickly once windows start breaking. There are other factors that can contribute to software rot…, but neglect accelerates the rot faster than any other factor.” - The Pragmatic Programmer Broken Windows “Maybe we should be sweating the small stuff.”
  • 10. @shyftsolutions #nebrcode Build a Solid Foundation • Single Responsibility Principle • Open/Closed Principle • Liskov Substitution Principle • Interface Segregation Principle • Dependency Inversion Principle SOLID Design Principles
  • 13. @shyftsolutions #nebrcode No one can accurately estimate time for software Build it the right-way not the fast-way Aim for approximately right, not precisely wrong Impatience is driven by uncertainty Delay decisions until the last responsible moment Time
  • 15. @shyftsolutions #nebrcode 100 40 20 10 40 20 10 20 10 10 20 40 60 1 PROJECT 2 PROJECTS 3 PROJECTS 4 PROJECTS PERCENTAGEOFTIME PRODUCTIVITY LOSS TO CONTEXT SWITCHING Project A Project B Project C Project D Context Switching Multi-Tasking Weinberg, G. M. (1997). Quality software management. New York: Dorset House Pub.
  • 16. “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler 2008 #include <sys/ioctl.h> #include <unistd.h> #include <string.h> #include <signal.h> #include <stdlib.h> #include <stdio.h> #define O_o "sfX4.Fv8H!`uf" "|~0y'vWtA@:LcO9d}y.!uL!Gd+ml(<+Ds!J" "e.6!r!%l6G!n~^<i=%pEwL%P!'<!FQt%u 5toG57j/3" "!:E%;!ea!!!WqE0z!f/y}!%!!Qi6!uzt!n}?]!bl!ak!SetR<" "Zj$x!~V!n&g8!cK! KrgR'8@c]!%-q9V.3fa[E8X%dY'w!#H <P~6" "?guhljL!^P% ?" "8!@dP,!!o+fb" "!pv!;!Hm%Ro4" "n:}nkD!Q!kN" "e:| 'b5sc!e" /* nothing */ #define mu(a) a a a a a //- #define O_(Q_ ) "033[" #Q_ #define Q_(O) mu(mu(mu(O))) #define Q/*-- ++--*/O9--||( #define main( )main(){/**/ signal(13,1), _();}f()//--+ #define k( k) getenv( "D"#k char*O0=O_o,OO,*Q1,O5[97];int*Q5,_Q=0,Q0=0,_O=0,_0=0,O=5,QQ,O6,Q6,O3 ,Q4,O4=41088,O1=sizeof(O5),O7=234;long long __;_()Q_({)int*Q3,Q2,O2,C, QO,O9=O,O8=!!!!!!!!!!k(RAFT));long long Q8;char*Q9=O_(1A)O_(%dB)O_(%dC )O_(34m)"xe2%c%crn"O_(0m)O_(%dA),*Q7;__+=(__*92+*O0-35-__)*(QO=Q_(! !)(*O0-33)*!O9--),O0+=O1*QO,QO&&_(),Q Q4&&(O-- ,_(),O0+=194,O++,Q4--,_( ))),Q O=0,__=0,_(),O=3,_()),Q __&&(C=__&15,_O+=(C<2)*12+!(QO=C&14^2)*( 4-_O)+(C==6)*( 12-2*_O)+(C>6)*(9-(C- 7)%3),_Q+=!QO*(_Q%QQ+(C&1)*O3-_Q), _0+=!_0*!QO+(1-2*_0)*!(C^4),(C==5)&&(__>>=4,Q8=__,Q7=O0,Q4=__&15,O=1,_ ()|O ++&_(),__=Q8 ,O0=Q7 ),Q3=( _Q+= O8*(9 *O4* O1 > lrand48()) +(_O%=8,( (_O% 6>2) -(_O% 7<2) )*QQ+((_O +7)%8<3 )-(_O>4) )*( C>5 ), Q2 = _Q/ O3)* O6+Q5 +(O2=_Q%QQ )/ 2,*Q3=* Q3 % O4+O4|(1 << Q_("" "@CADBEHI") [_Q%2+_Q %O3/ QQ*2 ]- 64)* _0, sprintf(O5, Q9, Q2+1, O2/2 ,*Q3>>8 ,85* 3&* Q3,Q2+1 )&& _0&&(O=8, Q1 = O5,_()), Q0 +=(O2 >Q0)*_0*(O2 -Q0 ),__ +=!( C>9)*(3- __+ ( __>>4))-3, __ +=(C>12 ) *( (__<<4 )+ C-3-__) ,usleep( O4* _0/(3* O8+1 )),O =3,_() )) ,!O9 --&& read( 1 ,& OO,1)> 0&&(O= (QO=OO ==35 )*3+6 ,_() ,QO&&(OO=10,O=6,_(),1)||(O=4,_()),0)||close(dup2(3-dup2(1,dup(0)-3),1) *0+2)*0||Q write(1,"> ",2),ioctl(Q0=0,TIOCGWINSZ,O5)^-- O&(O3=(QQ=(O6=* ((short*)O5+1))*2)*4),Q6=-O1,Q5=calloc(3*O6,8),_()),Q (O=8,QO=!(O2=OO- 10)|!(Q2=OO- 32)*(Q0+58>QQ)|(Q0+12>QQ))&&(Q1=O_(3B),_(),write(1,"> ",2) ),Q0+=!QO*!Q2*4-QO*Q0,O2*Q2&&(!Q0&&(memset(Q5,0,3*O3),Q0=4,Q1="nnn" O_(3A),_()),O=7,_Q=7*QQ+Q0+2,_O=_0=0,OO+=(OO>64 &OO<91)*32,O0=Q_(O_o)+ O7,_(),(*O0-OO)||(O=2,O0+='a',_( )))),Q *O0-OO)&&(*(O0+=O1)- 33)&&(O=0, _(),O=7,O0+=O1,_()),Q write(0,Q1,strlen(Q1))),Q OO=Q_(O_o)[Q6+=O1],(Q6 %strlen(O_o)-O7)&&(O=6,_(),O=9,_()));Q_(})/*+++++ IOCCC 2015 +++++*/ main() { puts("hello world!"); }
  • 17. @shyftsolutions #nebrcode Extreme Programming • The customer is always available • Code must be written to agreed standards • Code the unit test first • All production code is pair programmed • Only one pair integrates code at a time • Integrate often • Set up a dedicated integration computer • Use collective ownership Support Systems
  • 22. @shyftsolutions #nebrcode Communication Daily stand-ups, sprint reviews, customer interaction
  • 23. @shyftsolutions #nebrcode Communication Every conversation is a chance to get feedback and adjust aim The more frequent the conversations, the less time needed All time spent off of the shortest path is waste <<Spoilers>>The target doesn’t sit still!!
  • 24. @shyftsolutions #nebrcode Not about when, but how TDD Red Green Refactor
  • 26. @shyftsolutions #nebrcode Focus shifts to readability and standards Creates a shared mental-model Pair Programming 0 1 2 3 4 5 6 7 NumberofDays Individual Pair Individual 5.81 3.25 2.52 2.05 1.63 1.31 1.18 1.17 Pair 3.13 2.08 1.76 1.62 1.56 1.43 1.41 1.37 Singles Pairs Elapsed time (min) 42.60 30.20 Readability score (0-2) 1.40 2.00 Functionality score (0-6) 4.20 5.60
  • 27. @shyftsolutions #nebrcode A modest proposal i. Pair up ii. Work on design and algorithm and identify patterns of logic iii. Code and test sub-programs in pair programming iv. Split up to code anything that is similar to other sub- programs already paired on v. Pair up again vi. Review and perform integration tests vii. Go back to step (ii) until completion of assignments Pair Programming 0 1 2 3 4 5 6 7 NumberofDays Individual Pair Individual 5.81 3.25 2.52 2.05 1.63 1.31 1.18 1.17 Pair 3.13 2.08 1.76 1.62 1.56 1.43 1.41 1.37
  • 28. Agility in Software It starts with a commitment to do things better… It grows by holding each other to higher standards
  • 29. @shyftsolutions #nebrcode Books • Martin, R. C., Feathers, M. C., Ottinger,T. R., Langr, J. J., Schuchert, B. L., Grenning, J.W., & Wampler, K. D. (2015). Clean code: a handbook of agile software craftsmanship. Upper Saddle River, N.J: Prentice Hall. • Martin, R. C. (2014). Agile software development: principles, patterns, and practices. Harlow, UK: Pearson. Websites • https://pragprog.com/the-pragmatic-programmer/extracts/software-entropy • https://www.ted.com/talks/rory_sutherland_perspective_is_everything?language=en References

Editor's Notes

  1. I'm an intermediate, but passionate software developer who has walked with the giants. I've spent more time as a Scrum Master, Product Owner, and Manager, and I leverage my programming experience to motivate teams to delivery high-quality solutions, and to work with stakeholders to respect the teams time. That's the jist of this talk, I'm not going to get into syntax or code patterns, but focus on the art of writing software and some ways teams can work together to build and reinforce good habits.
  2. BG - only been in software officially for about 5 years Racing – {troubleshooting, maintenance} Have to change your oil and grease the wheel bearings to keep the car moving quickly… shortcuts cost you wins—and money Construction – {design, up-front planning, optimization, automation} If you have a hundred boards to cut 6 inches off of, you could measure out every board and cut them one at a time at about 40 seconds per board (4000 secs ~ 1 hour and 6 minutes)… or you could take 3 to 5 minutes up front and setup a jig to cut each board at less than 10 seconds per board (1300 secs ~ 21 minutes) Air Force – {standards, teamwork, leadership} following standards, working as a team, leading and motivating people and continuous improvement Weather – {communication} learned to be comfortable making estimates, humble enough to say things like “I don’t know”. Accuracy of predictions is based on context
  3. 17 Independent leaders in the software industry created the manifesto, made up of four key values and 12 principles
  4. Rooted in software development, less emphasis on planning So many look to Agile to solve mid-level planning problems without adopting an enterprise culture that fosters it Also fail to empower developers to operate at the tactical level in a truly Agile manner
  5. These fives principles are not necessarily any more important than others, but drive the majority of this talk
  6. Two teams of 5, one leader, organize by height with tallest person in the center of the room
  7. Anyone have a friend or relative who is an engineer in another field?... Mechanical engineering, electrical engineering, structural engineering, aeronautical engineering all have robust standards and many certifications or accreditations
  8. We have policies governing data security and vendor certifications, but no true standards around the quality of software—partly because it is so subjective Software runs everything Life and death and serious financial consequences are now a factor in many software applications
  9. What does bad software look like? What does this do to our system over time?
  10. Just because it rolls, it doesn’t mean you should drive it like that Things always work until they don't
  11. Painting the grass green A lot of people struggle to admit that something isn't right. It's OK to say you don't know what is wrong with the software Stutz story Have to be honest and open about what is going on. If we always cave to meet deadlines, and sacrfice quality at will, it reinforces the bad behavior
  12. Martin Fowler created extreme programming to build a process to enforce good behavior People inherently do what is easy-–so we have to make the right thing to do the easy thing These things have to be built into your teams "norms" and "definition of done"
  13. Ask questions Avoid fear of "too many cooks in the kitchen", too much communication can be filtered... there is no way to compensate for too little communication