1. Velocity 2012
Down with the fancy pants!
How people have been optimizing the wrong things
and increased complexity.
Jan Schaumann <jschauma@etsy.com>
B60D A9F7 0D89 544A 7995 7D25 5A5B 4375 275F 0BB5
@jschauma
Thursday, June 28, 12
2. Velocity 2012 - Down with the fancy pants!
On
ion
s!
http://etsy.me/L1iiuo
Thursday, June 28, 12
3. Velocity 2012 - Down with the fancy pants!
i on s!
ra ct
D ist
http://etsy.me/KQDDSU
Thursday, June 28, 12
4. Velocity 2012 - Down with the fancy pants!
The Art of Yak Shaving!
http://etsy.me/LlIZsf
(Yak Wo
ol)
http://etsy.me/nn3QDV
Thursday, June 28, 12
5. Velocity 2012 - Down with the fancy pants!
s!
t
lle
Bu
e r
S i lv
http://etsy.me/L6tJ40
Thursday, June 28, 12
6. Velocity 2012 - Down with the fancy pants!
s!
t
lle
Bu
e r
S i lv
Thursday, June 28, 12
7. Velocity 2012 - Down with the fancy pants!
X
y !
rr
S o
http://etsy.me/L6tJ40
Thursday, June 28, 12
8. Velocity 2012 - Down with the fancy pants!
How do we build websites?
Thursday, June 28, 12
9. Velocity 2012 - Down with the fancy pants!
http://etsy.me/LieAZe
Thursday, June 28, 12
10. Velocity 2012 - Down with the fancy pants!
How do we build websites?
^
large scale
Thursday, June 28, 12
11. Velocity 2012 - Down with the fancy pants!
Load Balancer
HTTP Servers
Message Broker
Database
Storage System
#dadops
Thursday, June 28, 12
12. Velocity 2012 - Down with the fancy pants!
Systems Architect
Load Balancer
HTTP Servers
Message Broker
Database
DNS
Storage System
#dadops
Thursday, June 28, 12
13. Velocity 2012 - Down with the fancy pants!
Exciting, right?
Thursday, June 28, 12
14. Velocity 2012 - Down with the fancy pants!
http://etsy.me/zQMzBn
Thursday, June 28, 12
15. Velocity 2012 - Down with the fancy pants!
Remember how a web server used to work?
Thursday, June 28, 12
16. Velocity 2012 - Down with the fancy pants!
Remember how a web server used to work?
Client: "Hello, I'd like to get the contents of this file, please."
GET / HTTP/1.0nn
Thursday, June 28, 12
17. Velocity 2012 - Down with the fancy pants!
Remember how a web server used to work?
Client: "Hello, I'd like to get the contents of this file, please."
GET / HTTP/1.0nn
Server: "Why, certainly, here you go."
cat file > socket
Thursday, June 28, 12
18. Velocity 2012 - Down with the fancy pants!
Remember how a web server used to work?
Client: "Hello, I'd like to get the contents of this file, please."
GET / HTTP/1.0nn
Server: "Why, certainly, here you go."
cat file > socket
http://etsy.me/L8TeSc
Thursday, June 28, 12
19. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Hello, I'd like to get the contents of this file on this server, please."
GET / HTTP/1.1nn
Host: this-servernn
Thursday, June 28, 12
20. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Hello, I'd like to get the contents of this file on this server, please."
GET / HTTP/1.1nn
Host: this-servernn
Server: "I'm sorry, Node.js just crashed."
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Thursday, June 28, 12
21. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Hello, I'd like to get the contents of this file on this server, please."
GET / HTTP/1.1nn
Host: this-servernn
Server: "I'm sorry, Node.js just crashed."
HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
http://etsy.me/LlGtC5
Thursday, June 28, 12
22. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Uhm... Node.js? I thought you said you're an Apache server?"
Server: "Oh, sure, but I hand off LESS compilation to Node.js, which is
faster than Rhino."
Thursday, June 28, 12
23. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Uhm... Node.js? I thought you said you're an Apache server?"
Server: "Oh, sure, but I hand off LESS compilation to Node.js, which is
faster than Rhino."
Client: "Uhm... Rhino? So you're... running Javascript inside Java?"
Server: "Oh, sure, I'm a Tomcat server!"
Thursday, June 28, 12
24. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Uhm... Node.js? I thought you said you're an Apache server?"
Server: "Oh, sure, but I hand off LESS compilation to Node.js, which is
faster than Rhino."
Client: "Uhm... Rhino? So you're... running Javascript inside Java?"
Server: "Oh, sure, I'm a Tomcat server!"
Client: "So I'm talking to... your Coyote 'HTTP connector', which hands my
requests off to your ‘Catalina servlet container’, which..."
Server: "...looks up stuff in various databases, triggers actions in a message
broker and hands the LESS compilation off to Node.js..."
Thursday, June 28, 12
25. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "Uhm... LESS? 'Compilation'? Why don't you just serve the plain old
CSS?"
Server: "Don't be silly. 'All problems in computer science can be solved by
another level of indirection.' Now where was I?"
Server: "Oh, right: ...hands the LESS compilation off to Node.js, which
just crashed."
Thursday, June 28, 12
26. Velocity 2012 - Down with the fancy pants!
HTTP today...
Client: "My head hurts. How did we get here?"
http://etsy.me/Lb57Y0
Thursday, June 28, 12
27. Velocity 2012 - Down with the fancy pants!
“Complex systems fail in complex ways.”
Steven M. Bellovin
Thursday, June 28, 12
28. Velocity 2012 - Down with the fancy pants!
<!-- web0013.ny4.etsy.com at Wed 20 06 12:24:24 2012 in 462 ms -->
Thursday, June 28, 12
29. Velocity 2012 - Down with the fancy pants!
Optimize for human time.
Thursday, June 28, 12
30. Velocity 2012 - Down with the fancy pants!
Is less really more?
// LESS /* Compiled CSS */
#header { #header h1 {
h1 { font-size: 26px;
font-size: 26px; font-weight: bold;
font-weight: bold; }
} #header p {
p { font-size: 12px; font-size: 12px;
a { text-decoration: none; }
&:hover { border-width: 1px } #header p a {
} text-decoration: none;
} }
} #header p a:hover {
border-width: 1px;
}
http://etsy.me/KU1wJr
Thursday, June 28, 12
31. Velocity 2012 - Down with the fancy pants!
<script src="less.js" type="text/javascript"></script>
Thursday, June 28, 12
32. Velocity 2012 - Down with the fancy pants!
Thursday, June 28, 12
33. Velocity 2012 - Down with the fancy pants!
--
`$=`;$_=%!;($_)=/(.)/;$==++$|;($.,$/,$,,$,$",$;,$^,$#,$~,$*,$:,@%)=(
$!=~/(.)(.).(.)(.)(.)(.)..(.)(.)(.)..(.)......(.)/,$"),$=++;$.++;$.++;
$_++;$_++;($_,$,$,)=($~.$"."$;$/$%[$?]$_$$,$:$%[$?]",$"&$~,$#,);$,++
;$,++;$^|=$";`$_$$,$/$:$;$~$*$%[$?]$.$~$*${#}$%[$?]$;$$"$^$~$*.>&$=`
Thursday, June 28, 12
34. Velocity 2012 - Down with the fancy pants!
Thursday, June 28, 12
35. Velocity 2012 - Down with the fancy pants!
Thursday, June 28, 12
36. Velocity 2012 - Down with the fancy pants!
Thursday, June 28, 12
37. Velocity 2012 - Down with the fancy pants!
http://etsy.me/LrIexP
Thursday, June 28, 12
38. Velocity 2012 - Down with the fancy pants!
Thursday, June 28, 12
39. Velocity 2012 - Down with the fancy pants!
“Premature optimization is the root of all evil.”
Donald Knuth
Thursday, June 28, 12
40. Velocity 2012 - Down with the fancy pants!
Optimize for human time.
Thursday, June 28, 12
41. Velocity 2012 - Down with the fancy pants!
How do we build websites?
Thursday, June 28, 12
42. Velocity 2012 - Down with the fancy pants!
http://etsy.me/w2pZPN
Thursday, June 28, 12
43. Velocity 2012 - Down with the fancy pants!
/bin/sh
http://etsy.me/L6Gb5O
Thursday, June 28, 12
44. Velocity 2012 - Down with the fancy pants!
stdin stdout stderr
/bin/sh
<< < | > >>
Thursday, June 28, 12
45. Velocity 2012 - Down with the fancy pants!
stdin stdout stderr
awk(1)
/bin/sh
<< < | > >>
Thursday, June 28, 12
46. Velocity 2012 - Down with the fancy pants!
stdin stdout stderr
awk(1) sed(1)
/bin/sh
<< < | > >>
Thursday, June 28, 12
47. Velocity 2012 - Down with the fancy pants!
sort(1)
stdin stdout stderr
awk(1) sed(1)
/bin/sh
uniq(1)
<< < | > >>
wc(1)
Thursday, June 28, 12
48. Velocity 2012 - Down with the fancy pants!
lam(1) comm(1) sort(1)
stdin stdout stderr
awk(1) sed(1)
/bin/sh
*roff(1) uniq(1)
<< < | > >>
col(1) fmt(1)
wc(1) paste(1)
Thursday, June 28, 12
49. Velocity 2012 - Down with the fancy pants!
|
Thursday, June 28, 12
50. Velocity 2012 - Down with the fancy pants!
text stream | text stream
Thursday, June 28, 12
51. Velocity 2012 - Down with the fancy pants!
...it is
on!
http://etsy.me/LoKFRA
http://etsy.me/LoKw0B
rse y vs . MIT
Ne w Je
Thursday, June 28, 12
52. Velocity 2012 - Down with the fancy pants!
text stream | text stream
Thursday, June 28, 12
53. Velocity 2012 - Down with the fancy pants!
XML makes me YAML.
Thursday, June 28, 12
54. Velocity 2012 - Down with the fancy pants!
XSLT is a language with an XML-based syntax
that is used to transform XML documents
into other XML documents...
Thursday, June 28, 12
55. Velocity 2012 - Down with the fancy pants!
XML makes me YAML.
Thursday, June 28, 12
56. Velocity 2012 - Down with the fancy pants!
The Dunning-Kruger effect applies to
Domain-Specific Languages, too.
Thursday, June 28, 12
57. Velocity 2012 - Down with the fancy pants!
http://www.jsonml.org/
“The purpose of JsonML is to provide a compact
format for transporting XML-based markup as
JSON which allows it to be losslessly converted
back to its original form.”
On the internet, nobody knows if you’re trolling.
http://etsy.me/Lbsj8k
Thursday, June 28, 12
58. Velocity 2012 - Down with the fancy pants!
object | object
Thursday, June 28, 12
59. Velocity 2012 - Down with the fancy pants!
Public: Public:
color: orange color: orange
shape: rect shape: rect
Private: Private:
corners: round corners:angular
tool1 | tool2
Thursday, June 28, 12
60. Velocity 2012 - Down with the fancy pants!
Complexity simplified:
•“essential complexity” is inherent to the
problem and cannot be reduced
Thursday, June 28, 12
61. Velocity 2012 - Down with the fancy pants!
Complexity simplified:
•“essential complexity” is inherent to the
problem and cannot be reduced
•“accidental complexity” is inadvertent and
frequently introduced indirectly
Thursday, June 28, 12
62. Velocity 2012 - Down with the fancy pants!
Public: Public:
color: orange color: orange
shape: rect shape: rect
Private: Private:
corners: round corners:angular
tool1| filter | tool2
Thursday, June 28, 12
63. Velocity 2012 - Down with the fancy pants!
object | object
Thursday, June 28, 12
64. Velocity 2012 - Down with the fancy pants!
http://stackoverflow.com/questions/6260420/choices-of-message-queue
Thursday, June 28, 12
65. Velocity 2012 - Down with the fancy pants!
http://stackoverflow.com/questions/6260420/choices-of-message-queue
Thursday, June 28, 12
66. Velocity 2012 - Down with the fancy pants!
http://etsy.me/eZxOwz
Thursday, June 28, 12
67. Velocity 2012 - Down with the fancy pants!
Total Cost of Ownership
purchase price time to evaluate solution
support contract time to deploy solution
savings in $resource time to on-ramp staff
time to integrate with existing tools
time to debug/update/maintain
Thursday, June 28, 12
68. Velocity 2012 - Down with the fancy pants!
http://etsy.me/LkuGI5
Thursday, June 28, 12
69. Velocity 2012 - Down with the fancy pants!
Total Cost of Ownership
$$
s
purchase price time to evaluate solution
our
support contract time to deploy solution
savings in $resource time to on-ramp staff
n-h
time to integrate with existing tools
ma
time to debug/update/maintain
Thursday, June 28, 12
70. Velocity 2012 - Down with the fancy pants!
Software maintenance is ~75% of TCO.
Thursday, June 28, 12
71. Velocity 2012 - Down with the fancy pants!
Software maintenance is ~75% of TCO.
Operational costs are the other 75%.
Thursday, June 28, 12
72. Velocity 2012 - Down with the fancy pants!
http://etsy.me/Lj89aR
Thursday, June 28, 12
73. Velocity 2012 - Down with the fancy pants!
http://etsy.me/Lj8hqI
Thursday, June 28, 12
74. Velocity 2012 - Down with the fancy pants!
minor PHP upgrade various ruby gems added / updated
libmemcached, sqlite, zlib, and openssl updated
http://etsy.me/Lj8hqI
Thursday, June 28, 12
75. Velocity 2012 - Down with the fancy pants!
http://etsy.me/HT7BJm
runs linux
minor PHP upgrade various ruby gems added / updated
libmemcached, sqlite, zlib, and openssl updated
http://etsy.me/Lj8hqI
Thursday, June 28, 12
76. Velocity 2012 - Down with the fancy pants!
http://etsy.me/LtSSrp
Thursday, June 28, 12
77. Velocity 2012 - Down with the fancy pants!
“Adding manpower to a late software
project makes it later.”
Brooks’s Law
Thursday, June 28, 12
78. Velocity 2012 - Down with the fancy pants!
Brooks’s Law also holds for software endpoints.
Thursday, June 28, 12
79. Velocity 2012 - Down with the fancy pants!
Group Intercommunication Formula:
#of channels of communication =
n(n − 1) / 2
5 developers:
5(5-1)/2 = 10
10 developers:
10(10-1)/2 = 45
50 developers:
50(50-1)/2 = 1225
Thursday, June 28, 12
80. Velocity 2012 - Down with the fancy pants!
Brooks’s Law also holds for software endpoints.
Adding independent components to a software architecture
increases complexity exponentially.
Thursday, June 28, 12
81. Velocity 2012 - Down with the fancy pants!
“Optimization is the process of taking something
that works and replacing it with something that
almost works, but costs less.”
Roger Needham
Thursday, June 28, 12
82. Velocity 2012 - Down with the fancy pants!
Identify accidental and essential complexity.
Eliminate the former, then optimize the latter.
Thursday, June 28, 12
83. Velocity 2012 - Down with the fancy pants!
•“Complex systems fail in complex ways.” (Bellovin)
•“Premature optimization is the root of all evil.” (Knuth)
•“Worse is better (is worse is still better).” (Gabriel)
•“Complexity increases non-linearly.” (Brooks)
•“Complexity is the enemy of security.” (Schneier)
•echo “import this” | python
http://etsy.me/Ly59Ly http://etsy.me/LlIZsf http://etsy.me/LnMCv7
Thursday, June 28, 12
84. Velocity 2012 - Down with the fancy pants!
Optimize for human time.
Thursday, June 28, 12
85. Velocity 2012 - Down with the fancy pants!
http://etsy.me/L8WcGD
Thursday, June 28, 12
86. Velocity 2012 - Down with the fancy pants!
Related talks, presentations and articles in no particular order:
• http://concur.rspace.googlecode.com/hg/talk/concur.html
• http://radar.oreilly.com/2012/04/complexity-vs-simplicity.html
• http://www.confreaks.com/videos/860-railsconf2012-keynote-simplicity-matters
• http://dreamsongs.com/WorseIsBetter.html
• http://michaelochurch.wordpress.com/2012/04/13/java-shop-politics/
• http://codebetter.com/markneedham/2010/03/18/essential-and-accidental-complexity/
• http://html9responsiveboilerstrapjs.com/
• http://jamesgolick.com/2010/10/27/we-are-experiencing-too-much-load-lets-add-a-new-
server..html
• http://is.gd/uCnnMg
Thursday, June 28, 12