SLIDE 1 How did we end up here?
Trisha Gee - @trisha_gee Todd Montgomery - @toddlmontgomery Shout out: Martin Thompson - @mjpt777
SLIDE 2
SLIDE 3
SLIDE 4
SLIDE 5
SLIDE 6
How bad can things really be?
SLIDE 7 Successful Challenged Failure
Ad-hoc 49% 37% 14% Iterative 61% 28% 11% Agile 60% 28% 12% Traditional 47% 36% 17% Software Project Success Rates
SLIDE 8 < 10 11 - 25 > 25
Ad-hoc 70% 58% 40% Iterative 88% 68% 55% Agile 83% 70% 55% Traditional 69% 51% 50% Software Project Success Rates – by Team Size
SLIDE 10 Successful: 32% Challenged: 44% Failure: 24%
– Standish Group Chaos Report 2010
Software Project Success Rates
SLIDE 11 < $350,000: 20% $350,000 - $1,000,000: 25% > $1,000,000: 28%
– Gartner 2012
Software Project Failure Rates
SLIDE 12 In a study of over 5400 large scale projects (> $15m) 17% go so badly that they threaten the existence of the company undertaking them
– The McInsey Group with Oxford University 2012
SLIDE 13
Sacred Cows - It’s BBQ Time!!!
SLIDE 14
Enterprise Software
SLIDE 15 ent•ter•prise
noun \ˈen-tə(r)-ˌprīz\ : a project or activity that involves many people and that is often difficult : the ability or desire to do dangerous or difficult things or to solve problems in new ways
Source: http://www.merriam-webster.com/
SLIDE 16
Naming Matters !!!
SLIDE 17
SLIDE 18
SLIDE 19
Product Management
SLIDE 20
Minimum Viable Product ?
SLIDE 21
Product Owner ?
SLIDE 22
SLIDE 23
Technologists ARE part of the business
SLIDE 24
Take responsibility for ROI
SLIDE 25
How can I get an answer for the minimum investment?
SLIDE 26
Agile Methods
SLIDE 27
SLIDE 28
SLIDE 29
Water-scrum-fall
SLIDE 30
What really matters?
SLIDE 31
Need to focus on learning, feedback cycles, and outcomes
SLIDE 32
There is an uncomfortable truth…
SLIDE 33
“What would have been different if you were not involved?”
SLIDE 34
Shared Mutable State
SLIDE 35
“…Shared Mutable State...” the most feared words in computing
SLIDE 36
…if not they should be!
SLIDE 37
SLIDE 38
SLIDE 39
Shared Mutable State should only be used for systems programming
SLIDE 40
Embrace append-only, single writer, and shared nothing designs
SLIDE 41
If you don‟t... math will hunt you down and there is nowhere to hide!
SLIDE 42 Universal Scalability Law
2 4 6 8 10 12 14 16 18 20 1 2 4 8 16 32 64 128 256 512 1024
Speedup Processors
Amdahl USL
SLIDE 43
Be ruthless in reducing complexity
SLIDE 44
Text Encoding
SLIDE 45
SLIDE 46
But it‟s human readable...
SLIDE 47
Binary is hard to work with...
SLIDE 48
SLIDE 49
SLIDE 50
Big Data
SLIDE 51
Communications Battery life and bandwidth?
SLIDE 52
Synchronous Comms
SLIDE 53
Bad things will happen!!!
SLIDE 54
Synchronous Communication is the crystal meth of distributed programming
SLIDE 55
Causes a coupling in location and time
SLIDE 56
Errors need to be first class messages
SLIDE 57 Are your micro services
SLIDE 58
Abstraction
SLIDE 59 “All non-trivial abstractions, to some extent, are leaky.”
SLIDE 60
“The detail of underlying complexity cannot be ignored.”
SLIDE 61 “the purpose of abstracting is not to be vague, but to create a new semantic level in which
- ne can be absolutely precise”
- Dijkstra
SLIDE 62
We could say the main issue is that people don‟t understand abstractions...but...
SLIDE 63
Sins committed in the name of Abstraction
SLIDE 64
ORMs !!!
SLIDE 65
Functional Programming
SLIDE 66
What is the biggest issue with functional programming?
SLIDE 67
Functional Programmers
SLIDE 68
Functional programming is
NOT
the answer to multi-core
SLIDE 69
Software Transactional Memory was a failed experiment!
SLIDE 70 Universal Scalability Law
2 4 6 8 10 12 14 16 18 20 1 2 4 8 16 32 64 128 256 512 1024
Speedup Processors
Amdahl USL
SLIDE 71
No Mechanical Sympathy?
SLIDE 72
However there is genuine brilliance in functional programming
SLIDE 73
Collaborate and great things can happen...
SLIDE 74
Throw hardware at it… development is too expensive
SLIDE 75
The free lunch is over… we cannot be sloppy anymore…
SLIDE 76
Code must be simple and composable
SLIDE 77 Cache Sub-System
L1(D) - 32K L2 - 256K L3 – 8-20MB LF/WC Buffers L1(I) – 32K L0(I) – 1.5k µops
32 Bytes / cycle
System Agent TLB Pre-fetchers TLB Pre-fetchers
128 bits / cycle
MOB Memory Controller QPI
QPI Bus Memory Channels 16 Bytes / cycle Ring Bus
PCI-e Controller
32 Bytes / cycle 32 Bytes / cycle
SLIDE 78
Patterns of access and locality are key to performance
SLIDE 79 Accumulated Improvement Time Bandwidth Latency
Memory Sub-System Performance
SLIDE 80 Accumulated Improvement Time Network Bandwidth Response Time Storage Capacity CPU Cores Memory Capacity
SLIDE 81
What does this mean for software?
SLIDE 82
SLIDE 83
Think in terms of transformation and flow of data – not code!
SLIDE 84
Diversity
SLIDE 85
Testosterone Driven Development
SLIDE 86
SLIDE 87
What did the Carnegie Mellon studies show?
SLIDE 88
SLIDE 89
SLIDE 90
Fake it until you make it…
SLIDE 91 “As soon as you realise that most people don‟t know what they are doing the world makes a lot more sense…”
– Farley’s second law
SLIDE 92
We need to look seriously at training programmers
SLIDE 93
Coaching and Apprenticeships
SLIDE 94 “The most important thing I've accomplished, other than building the compiler, is training young people.”
SLIDE 95 “'Do you think we can do this?' I say, „Try it.‟ And I back 'em up. They need that. I keep track of them as they get older and I stir 'em up at intervals so they don't forget to take chances.
SLIDE 96
In closing…
SLIDE 97 What are the greatest achievements
SLIDE 98
The Scientific Method
SLIDE 99
Understanding of Evolution
SLIDE 100
Don‟t feel bad… We are living in the era of Software Alchemy
SLIDE 101
SLIDE 102 Questions?
@trisha_gee – Trisha Gee @toddlmontgomery – Todd Montgomery @mjpt777 – Martin Thompson
“It does not matter how intelligent you are, if you guess and that guess cannot be backed up by experimental evidence – then it is still a guess.”