The document provides an overview of 10 reasons why software sucks and 10 practices needed to improve it. It discusses topics around development experience, object orientation, SOLID principles, patterns, secure coding, source control, automated testing, continuous integration/delivery, agile practices, and continuous learning. The overall message is that following best practices around these topics can help build better software and engineering teams.
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
10 Reasons Your Software Sucks - Election 2012 Edition
2. 10 Reasons your software Sucks
(and the 10 practices you need to fix it)
9. Building teams that engineer better software
Development Infrastructure Team Process
Experience Automated Tests Agile, Lean, XP
Object Orientation Source Control Team Dynamics
SOLID + Patterns + Continuous
Simple Design Automated Builds
Learning
Secure Coding
Development ∙ Infrastructure ∙ Team Process
32. Development Encapsulation
Inheritance
Polymorphism
Object Orientation
It’s amazing how many people write procedural code in an OO environment
33. Development Encapsulation
Inheritance
Polymorphism
Object Orientation
Use Right Tool for the Right Job
It’s amazing how many people write procedural code in an OO environment
OO
Functional
Procedural
43. “The single greatest thing that you can do to
make your code more testable and healthy is to
start taking a Dependency Injection approach to
writing software”
- Real World .NET, C# and Silverlight
Wrox Press 2012
Caleb Jenkins
47. MVC MVP More Repository
State
MVVM Visitor
More More
Abstract Factory Chain of Factory
Responsibility
Patterns More
Facade Strategy
Decorator
48. MVP MoreMore More
Repository
MVC More
State More
More
MVVM Visitor More
More
More More
More More
Abstract Factory Chain of
More Factory
More
More More
MorePatterns Responsibility
More
More More More
Facade More Strategy
Decorator
52. “Any intelligent fool can make things
Bigger, more complex and more
violent It takes a touch of Genius –
and a lot of courage – to move in the
opposite direction”
– Albert Einstein
79. I test I test
my units
of
app work
It compiled
in my
didn’t it? app
DI + Mock
are my best
friends
80. I test I test I run
my units automated
app
of unit
work
in my tests
It compiled
didn’t it? app CI FTW!
DI + Mock
are my best
friends
81. I test I test I run I test
my units automated first
app
of unit Red,
work
in my tests Refactor
Green,
It compiled Rinse +
didn’t it? app CI FTW! Repeat!
DI + Mock
are my best
friends
82. I test I test I run I test I
my units automated first write
app
of unit Red, Gr executable
specs
work
in my tests actor
een, Ref
to
It compiled Rinse +
didn’t it? app CI FTW! Repeat! test
DI + Mock
given <>
<> when
my
are my best
friends then<> app
87. I back File
up my Share
code Network Share
is +1 from
thumb drive
Thumb
drives are
awesome!
88. I back File VSS
up my Share was
code Network Share free
is +1 from
thumb drive
So was
Thumb
herpes
drives are
awesome!
89. I back File VSS Branch
up my Share was +
Merge
code Network Share free Release
is +1 from
thumb drive Strategy
So was Freedom
Thumb
herpes to code!
drives are
awesome! TFS,
SVN, GIT
90. Automated
I back File VSS Branch
Builds
up my Share was +
Merge CI, Auto
code Network Share free Release mated
is +1 from
thumb drive Strategy Deploy
“worked on my
So was machine”
Freedom
Thumb
herpes to code!
drives are take THAT
awesome! TFS, SVN
auditors!
, GIT
93. Source Control Production
Developer Operations
Common Deployment Scenario
94. Retrieve
Source Control Production
Source
compile +
send
binaries
configure +
deploy
binaries
Developer Operations
Common Deployment Scenario
95. Retrieve
Source Control Production
Source
compile +
send
binaries
configure +
deploy
binaries
Developer Operations
Common Deployment Scenario
96. Source Control Production
Developer Operations
Improved Deployment Scenario
101. Visual CI
Studio
Included in
Build TFS, Cruise
Control,
Team City,
Jenkins CI
F5 is How
I Roll
102. Visual CI Multi-
Environment
Studio
Included in Builds
Build TFS, Cruise
Control,
Team City,
Jenkins CI
Dev, Test, S
F5 is How tage, Produ
I Roll ction
103. Visual CI Multi- Build
Environment
Studio from
Included in Builds
Build TFS, Cruise
Control,
script
Team City, Source?
Jenkins CI Yes, run
Dev, Test, this .build
F5 is How Stage,
I Roll Production
104. Visual CI Multi- Build Hands
Studio
Environment
from Off
Included in Builds
Build TFS, Cruise
Control,
script Deployment
Team City, Source?
Jenkins CI Disaster
Yes, run
Recovery Plan
Dev, Test, this .build +
F5 is How Stage, Auditor
I Roll Compliance
Production
done
109. Sprint
Backlog
Push Pull
Agile, Lean, XP
Learn by doing
Scrum Kanban
Daily Stand Ups
Size Units of
Product
Backlog
Work
111. WAIT! What about …
Task boards, Information Radiators
Reducing Work In Progress, Time Boxing
Self Organization, Pull vs Push,
Empowerment, Continuous Learning,
Planning Poker, Story Sizing, Velocity,
Team Swarming… etc, etc, etc..
124. Building teams that engineer better software
Development Infrastructure Team Process
Automated
1 Experience 5 8 Agile, Lean, XP
Tests
Object Source Team Dynamics
2 Orientation 6 9
Control
Automated Continuous
3 SOLID + Patterns + 7 10
Simple Design Builds Learning
4 Secure Coding