indexer
independent technical decisions
search
shell scala
git hook embedded
os logging os logging
Slide 72
Slide 72 text
indexer
consistency helps avoid chaos
search
shell scala
git hook embedded
os logging os logging
Slide 73
Slide 73 text
Autonomy
Slide 74
Slide 74 text
#1
individually deployable
Slide 75
Slide 75 text
indexer search
Slide 76
Slide 76 text
indexer search
v1
v1
Slide 77
Slide 77 text
indexer search
v2 v1
Slide 78
Slide 78 text
indexer search
v3 v1
Slide 79
Slide 79 text
indexer search
v3 v2
Slide 80
Slide 80 text
#2
independent domain
models
Slide 81
Slide 81 text
indexer search
Slide 82
Slide 82 text
different notions of “index”
Slide 83
Slide 83 text
really don’t do this
Slide 84
Slide 84 text
really don’t do this
Slide 85
Slide 85 text
#3
standards for
interchange formats
Slide 86
Slide 86 text
indexer search
Slide 87
Slide 87 text
indexer search
Slide 88
Slide 88 text
indexer search
standard rules for these help avoid chaos
Slide 89
Slide 89 text
#4
no shared state
Slide 90
Slide 90 text
No content
Slide 91
Slide 91 text
really don’t do this
Slide 92
Slide 92 text
really don’t do this
Slide 93
Slide 93 text
autonomy builds in
reliability
Slide 94
Slide 94 text
indexer search
Slide 95
Slide 95 text
x
search
x
/\/\/\/\/\
Slide 96
Slide 96 text
x
search
x
/\/\/\/\/\
Slide 97
Slide 97 text
autonomy builds in the
ability to change
Slide 98
Slide 98 text
indexer search
shell scala
git hook embedded
os logging os logging
Slide 99
Slide 99 text
indexer search
haskell scala
git hook embedded
os logging os logging
Slide 100
Slide 100 text
How long does it take to
get a 1 line change to
production?
Slide 101
Slide 101 text
No content
Slide 102
Slide 102 text
No content
Slide 103
Slide 103 text
No content
Slide 104
Slide 104 text
No content
Slide 105
Slide 105 text
No content
Slide 106
Slide 106 text
warning signs
an anecdote
Slide 107
Slide 107 text
multi database - multi data center replication
100 million+ transactions a day
Slide 108
Slide 108 text
No content
Slide 109
Slide 109 text
No content
Slide 110
Slide 110 text
No content
Slide 111
Slide 111 text
No content
Slide 112
Slide 112 text
No content
Slide 113
Slide 113 text
No content
Slide 114
Slide 114 text
No content
Slide 115
Slide 115 text
No content
Slide 116
Slide 116 text
x x
Slide 117
Slide 117 text
x x
/\/\/\/\/\/\/\
Slide 118
Slide 118 text
the data-model was
entirely shared
between replication
and otp system
Slide 119
Slide 119 text
it was ALL shared state
Slide 120
Slide 120 text
it was really only
feasible to change if
one team was working
on both “systems”
Slide 121
Slide 121 text
if one system failed,
they often both failed
Slide 122
Slide 122 text
as we patched failure
modes, reliability never
improved
Slide 123
Slide 123 text
x x
/\/\/\/\/\/\/\
Slide 124
Slide 124 text
x
/\/\/\/\/\/\/\
Slide 125
Slide 125 text
autonomy is far more
important for
reliability than code
improvements
Slide 126
Slide 126 text
Programmer Myth #2
The Bad Code is to Blame
Slide 127
Slide 127 text
System Evolution
z
ģ
G
Y
Slide 128
Slide 128 text
“... with proper design, the
features come cheaply. This
approach is arduous, but
continues to succeed.”
Dennis Ritchie
Slide 129
Slide 129 text
thinking ahead is not
about avoiding change
Slide 130
Slide 130 text
indexer search
shell scala
git hook embedded
os logging os logging
Slide 131
Slide 131 text
indexer search
haskell scala
git hook embedded
os logging os logging
Slide 132
Slide 132 text
thinking ahead is about
letting us change at
different rates for
different problems
Slide 133
Slide 133 text
thinking ahead is about
letting us make short
term decisions that don’t
have long term effects
Slide 134
Slide 134 text
attempting change
an anecdote
Slide 135
Slide 135 text
small company
analytics product
very quality focused team
inherited a small piece of code
very bad code
Slide 136
Slide 136 text
the
product
Slide 137
Slide 137 text
the
jsp
Slide 138
Slide 138 text
the
rewrite
heavy focus on quality
Slide 139
Slide 139 text
the
rewrite
but… rebuilt same structure
Slide 140
Slide 140 text
No content
Slide 141
Slide 141 text
the
indivisible
blob
Slide 142
Slide 142 text
websphere
the
indivisible
blob
Slide 143
Slide 143 text
websphere
the
indivisible
blob
The Plan
ui
core
split
Slide 144
Slide 144 text
websphere
the
indivisible
blob
The Plan
ui
core
tech upgrade
Slide 145
Slide 145 text
websphere
the
indivisible
blob
The Plan
ui
core
indexer
websphere
isolate
Slide 146
Slide 146 text
The Reality
ui
core
indexer
websphere
Slide 147
Slide 147 text
The Reality
ui
core
indexer
websphere
data model + state
Slide 148
Slide 148 text
The Reality
ui
core
indexer
websphere
data model + state
WEBSHERE
Slide 149
Slide 149 text
Programmer Myth #3
We Must Do Something Now
Slide 150
Slide 150 text
Rewrites
Slide 151
Slide 151 text
Programmer Myth #4
We Should Rewrite
Slide 152
Slide 152 text
(not) Rewrites
Slide 153
Slide 153 text
architecture is
controlled by developers
not architects
Slide 154
Slide 154 text
#1
version everything
Slide 155
Slide 155 text
indexer search
Slide 156
Slide 156 text
indexer
v1
search
v1
Slide 157
Slide 157 text
indexer
v1
search
v1
v1 v1
v1
Slide 158
Slide 158 text
the internet is broken
an aside
Slide 159
Slide 159 text
MIME-Version: 1.0
Slide 160
Slide 160 text
what should a client
do if it sees something
that isn’t version 1.0?
Slide 161
Slide 161 text
#2
the wedge
Slide 162
Slide 162 text
the status quo
Slide 163
Slide 163 text
a wedge
the status quo
Slide 164
Slide 164 text
a wedge
the status quo
Slide 165
Slide 165 text
a wedge
the status quo
Slide 166
Slide 166 text
a wedge
Slide 167
Slide 167 text
a wedge
Slide 168
Slide 168 text
mega-code-search-tool
Slide 169
Slide 169 text
mega-code-search-tool
R
Slide 170
Slide 170 text
mega-code-search-tool
external indexer support
R
Slide 171
Slide 171 text
mega-code-search-tool R
external indexer support
Slide 172
Slide 172 text
mega-code-search-tool R
external indexer support
scala
Slide 173
Slide 173 text
R
scala
haskell
javascript
search
Slide 174
Slide 174 text
#3
embrace partial moves
Slide 175
Slide 175 text
mega-code-search-tool
Slide 176
Slide 176 text
mega-code-search-tool
{incomplete}
Slide 177
Slide 177 text
control in progress
moves at a single point
Slide 178
Slide 178 text
track and cap the
number of moves
in progress
Slide 179
Slide 179 text
plan for rollback as much
as rollforward
Slide 180
Slide 180 text
#4
validate as you go
Slide 181
Slide 181 text
mega-code-search-tool
Slide 182
Slide 182 text
mega-code-search-tool
external indexer support
R
Slide 183
Slide 183 text
R
make sure you can run
this straight away
external indexer support
mega-code-search-tool
Slide 184
Slide 184 text
R
make sure you can run
this straight away
external indexer support
mega-code-search-tool
Slide 185
Slide 185 text
mega-code-search-tool R
external indexer support
scala
Slide 186
Slide 186 text
mega-code-search-tool R
external indexer support
scala
Slide 187
Slide 187 text
mega-code-search-tool R
external indexer support
scala
Slide 188
Slide 188 text
R
scala
haskell
javascript
search
Slide 189
Slide 189 text
Experimentation
and Measurement
G
ģ
z
Y
Slide 190
Slide 190 text
Change Without Fear
Slide 191
Slide 191 text
we need confidence that
things don’t break when
we ship code
Slide 192
Slide 192 text
confidence stems from
knowing code works in
production before it affects
a customer
Slide 193
Slide 193 text
#1
move production to
development
Slide 194
Slide 194 text
production quality data
automation of environments
lots of testing
Slide 195
Slide 195 text
production quality data
automation of environments
lots of testing
Rather Old Hat
Slide 196
Slide 196 text
#2
move development to
production
Slide 197
Slide 197 text
yes, really.
i want to ship your worst,
un-tried, experimental
code to production
Slide 198
Slide 198 text
Programmer Myth #5
We Can’t Ship That
Slide 199
Slide 199 text
Safety First
Slide 200
Slide 200 text
@ambiata
we deal with ingesting and processing lots of data
100s TB / per day / per customer
scientific experiment and measurement is key
experiments affect users directly
researchers / non-specialist engineers produce code
Slide 201
Slide 201 text
ingest store
the machine
package
publish
Slide 202
Slide 202 text
ingest store
the machine
package
publish
Slide 203
Slide 203 text
ingest store
package
publish
the machine
Slide 204
Slide 204 text
#1
split environments
Slide 205
Slide 205 text
ingest store
package
publish
the machine
Slide 206
Slide 206 text
ingest store
package
publish
the machine
production:live
Slide 207
Slide 207 text
ingest store
package
publish
the machine
production:exp
Slide 208
Slide 208 text
ingest store
package
publish
the machine
production:*
package
publish
Slide 209
Slide 209 text
implemented through machine level acls
experiment
live
control
Slide 210
Slide 210 text
implemented through machine level acls
experiment
live
control
write
read
Slide 211
Slide 211 text
implemented through machine level acls
experiment
live
control
Slide 212
Slide 212 text
implemented through machine level acls
experiment
live
control
write
read
Slide 213
Slide 213 text
implemented through machine level acls
experiment
live
control
write
read
Slide 214
Slide 214 text
#2
checkpoints
Slide 215
Slide 215 text
ingest store
package
publish
the machine
Slide 216
Slide 216 text
ingest store
package
publish
the machine
x x
Slide 217
Slide 217 text
ingest store
package
publish
the machine
x x
Slide 218
Slide 218 text
ingest store
package
publish
the machine
x x
Slide 219
Slide 219 text
ingest store
package
publish
the machine
x x
Slide 220
Slide 220 text
deep implementation,
intra- and inter- process
crosschecks
Slide 221
Slide 221 text
#3
tandem deployments
Slide 222
Slide 222 text
ingest store
package
publish
the machine
Slide 223
Slide 223 text
ingest store
package
publish
the machine
Slide 224
Slide 224 text
ingest store
package
publish
the machine
x x
x x
Slide 225
Slide 225 text
ingest store
package
publish
the machine
x x
x x
Slide 226
Slide 226 text
ingest store
package
publish
the machine
x x
x x
Slide 227
Slide 227 text
ingest store
package
publish
the machine
x x
x x
Slide 228
Slide 228 text
#4
measure everything
Slide 229
Slide 229 text
every result computed
should have traceability
back to the code & data