Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The Social Coding Contract

The Social Coding Contract

Justin Searls

November 19, 2014
Tweet

More Decks by Justin Searls

Other Decks in Programming

Transcript

  1. THE SOCIAL CODING CONTRACT

    View full-size slide

  2. My name is Justin Searls
    Please tweet me @searls &
    Say [email protected]

    View full-size slide

  3. Open Source is Good!

    View full-size slide

  4. is Open Source Good?

    View full-size slide

  5. - . --
    -
    /
    .
    .
    0
    .
    1

    View full-size slide

  6. - . --
    -
    /
    .
    .
    0
    .
    2
    .
    1

    View full-size slide

  7. - . --
    -
    /
    .
    .
    0
    .
    2
    .
    1 ✅

    View full-size slide

  8. - . --
    -
    /
    .
    .
    0
    .
    2
    .
    1 ✅

    View full-size slide

  9. ideology, n. \
    ˌˌ
    i-dē-
    ˈ
    ä-lƧ-jē\

    View full-size slide

  10. ideology, n. \
    ˌˌ
    i-dē-
    ˈ
    ä-lƧ-jē\
    "They do not know it,
    but they are doing it"

    View full-size slide

  11. ideology, n. \
    ˌˌ
    i-dē-
    ˈ
    ä-lƧ-jē\
    "They do not know it,
    but they are doing it"
    - Karl Marx

    View full-size slide

  12. Open source fans are a bunch of hippies
    so I figured I'd start with a Marx quote

    View full-size slide

  13. economics
    philosophy

    View full-size slide

  14. economics
    philosophy

    View full-size slide

  15. The march of progress
    & our false consciousness

    View full-size slide

  16. IN THE BEGINNING

    View full-size slide

  17. SPECIALIZATION

    View full-size slide

  18. SPECIALIZATION
    veggies

    View full-size slide

  19. SPECIALIZATION
    veggies meats

    View full-size slide

  20. SPECIALIZATION
    veggies meats games

    View full-size slide

  21. INDUSTRIALIZATION

    View full-size slide

  22. INDUSTRIALIZATION

    View full-size slide

  23. INDUSTRIALIZATION

    View full-size slide

  24. INDUSTRIALIZATION

    View full-size slide

  25. INTERNETIFICATION
    1-Click

    View full-size slide

  26. BIG DATAFICATION

    View full-size slide

  27. BIG DATAFICATION
    ???

    View full-size slide

  28. Unintended Consequences

    View full-size slide

  29. FOR, LIKE, AT LEAST A MONTH

    View full-size slide

  30. progress
    awfulness

    View full-size slide

  31. progress
    awfulness

    View full-size slide

  32. progress
    awfulness

    View full-size slide

  33. progress
    awfulness

    View full-size slide

  34. progress
    awfulness

    View full-size slide

  35. Open Source's Progress

    View full-size slide

  36. .h & .c files

    View full-size slide

  37. veggies
    Makefile

    View full-size slide

  38. 1-Click
    Gemfile

    View full-size slide

  39. package.json

    View full-size slide

  40. 50ft
    100ft
    windows max
    file path limit

    View full-size slide

  41. short-term progress

    View full-size slide

  42. short-term progress
    for the low, low price of

    View full-size slide

  43. short-term progress
    for the low, low price of
    long-term fragility

    View full-size slide

  44. Build a small, but non-trivial, Rails
    app. An empty app has ~50 gem
    dependencies; yours will have 75-100.
    Go away for six months. Come back
    and update all of your dependencies.
    Your app no longer works.

    View full-size slide

  45. It's easy to start a Jekyll blog, though. Easy
    to install sass. Easy to generate a Rails app.
    Always easy right now, never in a year.

    View full-size slide

  46. What we think
    our app is

    View full-size slide

  47. What our app
    really is

    View full-size slide

  48. easy, but
    not simple

    View full-size slide

  49. We say "it's a Rails app"

    View full-size slide

  50. We never say "and Rails depends
    on thor >= 0.18.1, < 2.0"

    View full-size slide

  51. We never say "and Rails depends
    on thor >= 0.18.1, < 2.0"
    We don't even notice that!

    View full-size slide

  52. Bundler could not find compatible versions for gem "thor":
    In Gemfile:
    ajax-cat (= 2.1.0) ruby depends on
    thor (~> 0.15.2) ruby
    rails (= 4.1.4) ruby depends on
    railties (= 4.1.4) ruby depends on
    thor (0.18.1)
    Even though 272 gems can
    no longer be installed!

    View full-size slide

  53. What if Bundler told us more?
    ...
    Using unicorn 4.8.3
    Using zurb-foundation 4.3.2
    Your bundle is complete!
    Use `bundle show [gemname]` to see where a bundled gem is installed.

    View full-size slide

  54. What if Bundler told us more?
    ...
    Using unicorn 4.8.3
    Using zurb-foundation 4.3.2
    Your bundle is complete!
    Use `bundle show [gemname]` to see where a bundled gem is installed.
    Your bundle has 10 direct dependencies and 43 transitive dependencies.

    View full-size slide

  55. What if Bundler told us more?
    ...
    Using unicorn 4.8.3
    Using zurb-foundation 4.3.2
    Your bundle is complete!
    Use `bundle show [gemname]` to see where a bundled gem is installed.
    Your bundle has 10 direct dependencies and 43 transitive dependencies.
    Your gems' version specifiers preclude the installation of 1300 gems.

    View full-size slide

  56. What if Bundler told us more?
    ...
    Using unicorn 4.8.3
    Using zurb-foundation 4.3.2
    Your bundle is complete!
    Use `bundle show [gemname]` to see where a bundled gem is installed.
    Your bundle has 10 direct dependencies and 43 transitive dependencies.
    Your gems' version specifiers preclude the installation of 1300 gems.
    `bundle update` would be unable to update 5 gems to the latest version.

    View full-size slide

  57. One day, every new
    install started failing

    View full-size slide

  58. Video of me
    that weekend

    View full-size slide

  59. convenience
    need

    View full-size slide

  60. convenience
    need
    complexity

    View full-size slide

  61. convenience
    need
    complexity
    risk

    View full-size slide

  62. convenience
    need
    complexity
    risk
    mystery

    View full-size slide

  63. As painful as Makefiles are,
    they still work 30 years later

    View full-size slide

  64. Open Source
    Maintainers
    are not
    Rockstars

    View full-size slide

  65. Maintainers are just
    extra-early adopters

    View full-size slide

  66. MAINTAINER EARLY ADOPTER

    View full-size slide

  67. MAINTAINER EARLY ADOPTER
    soap for ruby

    View full-size slide

  68. MAINTAINER EARLY ADOPTER
    soap for ruby
    No results found

    View full-size slide

  69. MAINTAINER EARLY ADOPTER

    View full-size slide

  70. MAINTAINER EARLY ADOPTER

    View full-size slide

  71. MAINTAINER EARLY ADOPTER

    View full-size slide

  72. MAINTAINER EARLY ADOPTER
    soap for ruby

    View full-size slide

  73. MAINTAINER EARLY ADOPTER
    soap for ruby
    1. soapy-ruby gem

    View full-size slide

  74. MAINTAINER EARLY ADOPTER

    View full-size slide

  75. MAINTAINER EARLY ADOPTER

    View full-size slide

  76. MAINTAINER EARLY ADOPTER

    View full-size slide

  77. MAINTAINER EARLY ADOPTER

    View full-size slide

  78. MAINTAINER EARLY ADOPTER

    View full-size slide

  79. MAINTAINER EARLY ADOPTER

    View full-size slide

  80. SCRATCHING AN ITCH

    View full-size slide

  81. SCRATCHING AN ITCH

    View full-size slide

  82. SCRATCHING AN ITCH

    View full-size slide

  83. SCRATCHING AN ITCH

    View full-size slide

  84. SCRATCHING AN ITCH

    View full-size slide

  85. SCRATCHING AN ITCH

    View full-size slide

  86. SCRATCHING AN ITCH

    View full-size slide

  87. MAINTAINER EARLY ADOPTER

    View full-size slide

  88. MAINTAINER
    hey, let's own
    this together!
    EARLY ADOPTER

    View full-size slide

  89. MAINTAINER
    hey, let's own
    this together!
    EARLY ADOPTER
    wow, me?
    let's do this!

    View full-size slide

  90. MAINTAINER EARLY ADOPTER

    View full-size slide

  91. MAINTAINER
    hey, let's make
    you a committer!
    EARLY ADOPTER

    View full-size slide

  92. MAINTAINER
    hey, let's make
    you a committer!
    EARLY ADOPTER
    awesome, i will
    help sometimes!

    View full-size slide

  93. MAINTAINER EARLY ADOPTER

    View full-size slide

  94. MAINTAINER
    hey, let's never
    communicate again!
    EARLY ADOPTER

    View full-size slide

  95. MAINTAINER
    hey, let's never
    communicate again!
    EARLY ADOPTER
    sounds good,
    bye forever!

    View full-size slide

  96. MAINTAINER
    hey, let's never
    communicate again!
    EARLY ADOPTER

    View full-size slide

  97. Why don't maintainers
    just share control?

    View full-size slide

  98. time
    happiness

    View full-size slide

  99. time
    happiness

    View full-size slide

  100. time
    happiness

    View full-size slide

  101. time
    happiness

    View full-size slide

  102. time
    happiness

    View full-size slide

  103. Late adopters will disabuse
    them of this happiness

    View full-size slide

  104. MAINTAINER LATE ADOPTER

    View full-size slide

  105. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  106. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  107. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  108. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  109. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  110. MAINTAINER LATE ADOPTER
    0 commits this week

    View full-size slide

  111. MAINTAINER
    no recent commits?
    sounds stable!
    LATE ADOPTER
    0 commits this week

    View full-size slide

  112. MAINTAINER LATE ADOPTER
    800 stars?
    sounds safe!
    0 commits this week

    View full-size slide

  113. MAINTAINER LATE ADOPTER
    open source?
    sounds free!
    0 commits this week

    View full-size slide

  114. maintainer'
    s needs

    View full-size slide

  115. maintainer & early
    adopters' needs

    View full-size slide

  116. user needs
    a negotiation

    View full-size slide

  117. Literally, like, two days later

    View full-size slide

  118. MAINTAINER LATE ADOPTER

    View full-size slide

  119. MAINTAINER LATE ADOPTER

    View full-size slide

  120. MAINTAINER
    what?! it doesn't [enterprise]
    my [enterprise] at all!
    LATE ADOPTER

    View full-size slide

  121. MAINTAINER LATE ADOPTER
    how could they ignore such
    an important use case?!

    View full-size slide

  122. time
    happiness

    View full-size slide

  123. time
    happiness

    View full-size slide

  124. time
    happiness

    View full-size slide

  125. Late adopters expect more
    niche features than early adopters

    View full-size slide

  126. Late adopters make better
    customers than users

    View full-size slide

  127. Late adopters make better
    customers than users

    View full-size slide

  128. Late adopters make better
    customers than users
    Dual-license

    View full-size slide

  129. Late adopters make better
    customers than users
    Dual-license
    "Pro™" features

    View full-size slide

  130. Late adopters make better
    customers than users
    Dual-license
    "Pro™" features
    Paid support

    View full-size slide

  131. Late adopters make better
    customers than users
    Dual-license
    "Pro™" features
    Paid support
    ¯\_(π)_/¯

    View full-size slide

  132. Maintainers should feel
    free to say "No"

    View full-size slide

  133. MAINTAINER TROLLS

    View full-size slide

  134. [HATE]
    MAINTAINER TROLLS

    View full-size slide

  135. plz stahp [HATE]
    MAINTAINER TROLLS

    View full-size slide

  136. plz stahp [THREATS]
    MAINTAINER TROLLS

    View full-size slide

  137. woah! not cool! [THREATS]
    MAINTAINER TROLLS

    View full-size slide

  138. woah! not cool! [REDACTED]
    MAINTAINER TROLLS

    View full-size slide

  139. (›°□°ʣ›ớ ᵲᴸᵲ [REDACTED]
    MAINTAINER TROLLS

    View full-size slide

  140. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  141. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  142. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  143. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  144. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  145. ASYMMETRIC POWER
    maintainer users

    View full-size slide

  146. time
    happiness

    View full-size slide

  147. time
    happiness

    View full-size slide

  148. MAINTAINER ANYBODY

    View full-size slide

  149. MAINTAINER
    i'm burnt out
    can someone help
    me maintain this?
    ANYBODY

    View full-size slide

  150. hello?
    MAINTAINER ANYBODY

    View full-size slide

  151. anybody?
    MAINTAINER ANYBODY

    View full-size slide

  152. time
    happiness

    View full-size slide

  153. time
    happiness

    View full-size slide

  154. No Maintainer is Forever

    View full-size slide

  155. <_why disappears>

    View full-size slide

  156. What if there were
    an app for this?

    View full-size slide

  157. PRO
    %QPPGEVVQ5GTXKEGU
    4WD[)GOU
    )KVJWD
    UGVWR

    View full-size slide

  158. ;QWT2TQLGEVU
    NKPGOCPLUNKPGOCP
    ;'5
    ;'5
    01
    01
    UGCTNULCUOKPGTCKNU
    ;'5 01
    VGUVFQWDNGRTGUGPV
    0GGF*GNR!

    View full-size slide

  159. 2TQLGEVU;QW7UG
    UGCTNULCUOKPGTCKNU
    OKMGCNTGSWGUV npm %QPVCEV
    %QPVCEV
    1HHGT*GNR

    View full-size slide

  160. $GPGHKEKCTKGU
    VMCWHOCP
    DMGGRGTU
    npm
    npm
    4GOQXG
    4GOQXG
    +HCHVGTFC[U[QWFQPQVTGURQPFVQCEJGEMKPGOCKN[QWT
    TGRQUKVQTKGU QYPGTUJKRYKNNDGVTCPUHGTTGFVQVJGUGRGQRNG

    View full-size slide

  161. 61UGCTNU
    57$,'%6%JGEMKP
    *KUGCTNU

    2NGCUGXGTKH[[QW TGUVKNNCDNGVQ
    OCKPVCKP[QWTQRGPUQWTEGD[
    TGRN[KPIVQVJKUGOCKNQTENKEMKPI
    VJKUNKPM

    View full-size slide

  162. I like to call this app:

    View full-size slide

  163. I like to call this app:
    SomebodyPleaseMakeThis

    View full-size slide

  164. I like to call this app:
    SomebodyPleaseMakeThis.io

    View full-size slide

  165. What about the ☁️?

    View full-size slide

  166. Can any centralized
    service be open?

    View full-size slide

  167. I ask, because most open source
    infrastructure is centralized

    View full-size slide

  168. What if RubyGems disappears?

    View full-size slide

  169. What if npm fails and
    loses a month of backups?

    View full-size slide

  170. What might a decentralized
    dependency service look like?

    View full-size slide

  171. OH NO! GITHUB WENT DOWN!

    View full-size slide

  172. GOOD THING THAT'
    S ALL WE USE GITHUB FOR!

    View full-size slide

  173. How can we connect numerous services
    while avoiding single points of failure?

    View full-size slide

  174. Open Source requires adoption

    View full-size slide

  175. Adoption requires trust

    View full-size slide

  176. explicit trust

    View full-size slide

  177. explicit trust
    implicit trust

    View full-size slide

  178. How do we get people to trust us?

    View full-size slide

  179. Consider Linus Torvalds' 1991
    announcement of Linux

    View full-size slide

  180. No Catchy Name!

    View full-size slide

  181. No Catchy Name!
    Self deprecation!

    View full-size slide

  182. No Catchy Name!
    Self deprecation!
    Off-message!

    View full-size slide

  183. Linux wouldn't have made
    the front page of Hacker News!

    View full-size slide

  184. Logo!
    Web-site stuff!

    View full-size slide

  185. Logo!
    Foundation Affiliation!
    Web-site stuff!

    View full-size slide

  186. More dependencies means
    less time to vet them

    View full-size slide

  187. Quick intro!

    View full-size slide

  188. Quick intro!
    Easy steps!

    View full-size slide

  189. Quick intro!
    Easy steps!
    Mostly green badges!

    View full-size slide

  190. It's an arms race %

    View full-size slide

  191. gradients!
    Authoritative
    Tagline!

    View full-size slide

  192. gradients!
    One-liner!
    Authoritative
    Tagline!

    View full-size slide

  193. gradients!
    1000 things!
    One-liner!
    Authoritative
    Tagline!

    View full-size slide

  194. Optimized for adoption

    View full-size slide

  195. Optimized for adoption

    View full-size slide

  196. Optimized for adoption

    View full-size slide

  197. Optimized for adoption

    View full-size slide

  198. Optimized for adoption

    View full-size slide

  199. Optimized for adoption

    View full-size slide

  200. Optimized for adoption

    View full-size slide

  201. Who's got time to vet
    transitive dependencies?

    View full-size slide

  202. The more people you trust, the more
    people you don't realize you trust

    View full-size slide

  203. Recognize when projects
    are marketing to you

    View full-size slide

  204. Open Security

    View full-size slide

  205. You can do worse than
    security through obscurity

    View full-size slide

  206. "Open source code is
    accessible to everyone!"

    View full-size slide

  207. "Open source code is
    accessible to everyone!"

    View full-size slide

  208. WHO READS THE SOURCE?

    View full-size slide

  209. WHO READS THE SOURCE?
    People who claim to

    View full-size slide

  210. WHO READS THE SOURCE?
    People who claim to
    People who actually do

    View full-size slide

  211. WHO READS THE SOURCE?
    People who fork

    View full-size slide

  212. WHO READS THE SOURCE?
    People who fork
    Forkers who do anything

    View full-size slide

  213. WHO READS THE SOURCE?
    People with Commit rights

    View full-size slide

  214. WHO READS THE SOURCE?
    People with Commit rights
    Committers

    View full-size slide

  215. WHO READS THE SOURCE?
    People that send a pull request

    View full-size slide

  216. WHO READS THE SOURCE?
    People that send a pull request
    Not just drive-by PRs

    View full-size slide

  217. WHO READS THE SOURCE?
    People hunting for exploits

    View full-size slide

  218. WHO READS THE SOURCE?
    People hunting for exploits

    View full-size slide

  219. Global variables everywhere
    extern int posixly_correct;
    extern int line_number, line_number_base;
    extern int subshell_environment, indirection_level;
    extern int build_version, patch_level;
    extern int expanding_redir;
    extern int last_command_exit_value;
    extern char *dist_version, *release_status;
    extern char *shell_name;
    extern char *primary_prompt, *secondary_prompt;
    extern char *current_host_name;
    extern sh_builtin_func_t *this_shell_builtin;
    extern SHELL_VAR *this_shell_function;
    extern char *the_printed_command_except_trap;
    extern char *this_command_name;
    extern char *command_execution_string;
    extern time_t shell_start_time;
    extern int assigning_in_environment;
    extern int executing_builtin;
    extern int funcnest_max;

    View full-size slide

  220. Side-effects everywhere
    static void create_variable_tables ()

    View full-size slide

  221. The vulnerable function
    for (string_index = 0; string = env[string_index++]; )
    {
    char_index = 0;
    name = string;
    while ((c = *string++) && c != '=')
    ;
    if (string[-1] == '=')
    char_index = string - name - 1;
    /* If there are weird things in the environment, like `=xxx' or a
    string without an `=', just skip them. */
    if (char_index == 0)
    continue;
    /* ASSERT(name[char_index] == '=') */
    name[char_index] = '\0';
    /* Now, name = env variable name, string = env variable value, and
    char_index == strlen (name) */
    temp_var = (SHELL_VAR *)NULL;
    /* If exported function, define it now. Don't import functions from
    the environment in privileged mode. */
    if (privmode == 0 && read_but_dont_execute == 0 && STREQN ("() {", string,
    4))
    {

    View full-size slide

  222. The vulnerable function
    for (string_index = 0; string = env[string_index++]; )
    {

    View full-size slide

  223. As a rubyist I don't spend a lot
    of time with for loops, but...

    View full-size slide

  224. The vulnerable function
    for (string_index = 0; string = env[string_index++]; )
    {

    View full-size slide

  225. The vulnerable function
    for (i = 0; env[i] != NULL; i++) {

    View full-size slide

  226. "The solution is not...proprietary
    software—the solution is to put
    energy and resources into auditing
    and improving free programs."
    - Free Software Foundation

    View full-size slide

  227. Who wants to audit the quality of code
    that literally everyone depends on?

    View full-size slide

  228. popular adoption

    View full-size slide

  229. popular adoption
    importance
    of audit

    View full-size slide

  230. popular adoption
    importance
    of audit
    motivation
    to audit

    View full-size slide

  231. Tragedy of the Commons:

    View full-size slide

  232. Tragedy of the Commons:
    It's nobody's problem until
    it's everybody's problem

    View full-size slide

  233. text
    text
    text
    text
    text

    View full-size slide

  234. Don't let your business believe
    open source is a free lunch

    View full-size slide

  235. THESE STICK FIGURES WERE A LIE

    View full-size slide

  236. How we communicate

    View full-size slide

  237. How we communicate

    View full-size slide

  238. How we communicate

    View full-size slide

  239. How we communicate

    View full-size slide

  240. How we communicate
    Asynchronous text

    View full-size slide

  241. We are no more than:

    View full-size slide

  242. We are no more than:
    an avatar

    View full-size slide

  243. We are no more than:
    a user @name
    an avatar

    View full-size slide

  244. We are no more than:
    a user @name
    an avatar
    some emoji 78

    View full-size slide

  245. We are no more than:
    a user @name
    an avatar
    some emoji 78
    text on a screen

    View full-size slide

  246. In open source, no one
    can hear you scream

    View full-size slide

  247. In open source, no one
    can hear you scream
    (And that's a problem.)

    View full-size slide

  248. UNCERTAINTY?

    View full-size slide

  249. DISAGREEMENT?

    View full-size slide

  250. SIMMERING DISDAIN?

    View full-size slide

  251. SIMMERING DISDAIN?

    View full-size slide

  252. SIMMERING DISDAIN?

    View full-size slide

  253. SIMMERING DISDAIN?

    View full-size slide

  254. SIMMERING DISDAIN?

    View full-size slide

  255. SIMMERING DISDAIN?

    View full-size slide

  256. This strategy can be
    great troll repellant

    View full-size slide

  257. What if we could do this:

    View full-size slide

  258. What if we could do this:

    View full-size slide

  259. What if we could do this:

    View full-size slide

  260. What if we could do this:

    View full-size slide

  261. What if we could do this:

    View full-size slide

  262. What does the future hold?

    View full-size slide

  263. progress
    awfulness

    View full-size slide

  264. progress
    awfulness
    we are
    here

    View full-size slide

  265. progress
    awfulness
    we are
    here

    View full-size slide

  266. progress
    awfulness
    we are
    here
    what
    happens
    here?

    View full-size slide

  267. Extrapolating from our
    culture of dependence

    View full-size slide

  268. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  269. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  270. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  271. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  272. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  273. time
    high
    level
    low
    level
    Innovation '
    s

    View full-size slide

  274. time
    high
    level
    low
    level
    Today'
    s
    dependency
    "culture"
    Innovation '
    s

    View full-size slide

  275. time
    high
    level
    low
    level
    Today'
    s
    dependency
    "culture"
    Innovation '
    s

    View full-size slide

  276. time
    high
    level
    low
    level
    Today'
    s
    dependency
    "culture"
    How will it
    translate?
    Innovation '
    s

    View full-size slide

  277. Systems programmers tend
    to be conservative, cautious

    View full-size slide

  278. Isolated from
    innovation

    View full-size slide

  279. Isolated from
    innovation
    curmudgeonly
    disposition

    View full-size slide

  280. curmudgeonly
    disposition
    Accidental
    cautiousness

    View full-size slide

  281. Accidental
    cautiousness
    Intentional
    cautiousness

    View full-size slide

  282. Embedded & real-time failures
    may have grave consequences

    View full-size slide

  283. high
    level
    low
    level

    View full-size slide

  284. high
    level
    low
    level
    HealthCare.gov

    View full-size slide

  285. high
    level
    low
    level
    HealthCare.gov

    View full-size slide

  286. high
    level
    low
    level
    HealthCare.gov

    View full-size slide

  287. Adopting a dependency outsources our
    understanding of how to do something

    View full-size slide

  288. Dependency
    Our app

    View full-size slide

  289. Dependency
    Our app

    View full-size slide

  290. Dependency
    Our app
    Understanding debt

    View full-size slide

  291. "Understanding debt" can
    be paid down by iterating

    View full-size slide

  292. If iterative releases aren't possible,
    don't outsource understanding

    View full-size slide

  293. high level low level

    View full-size slide

  294. high level low level

    View full-size slide

  295. high level low level

    View full-size slide

  296. high level low level
    5-years

    View full-size slide

  297. high level low level
    5-years 30-years

    View full-size slide

  298. high level low level
    5-years 30-years

    View full-size slide

  299. high level low level
    5-years 30-years

    View full-size slide

  300. high level low level
    5-years 30-years

    View full-size slide

  301. high level low level
    5-years 30-years

    View full-size slide

  302. high level low level
    5-years 30-years

    View full-size slide

  303. high level low level
    5-years 30-years

    View full-size slide

  304. easy to
    iterate
    high level low level
    5-years 30-years

    View full-size slide

  305. easy to
    iterate
    high level low level
    5-years 30-years
    hard to
    iterate

    View full-size slide

  306. These concerns require deeper up-front
    understanding of low-level systems

    View full-size slide

  307. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control

    View full-size slide

  308. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control

    View full-size slide

  309. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control

    View full-size slide

  310. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work

    View full-size slide

  311. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work
    Needs to know
    how planes
    work

    View full-size slide

  312. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work
    Needs to know
    how planes
    work

    View full-size slide

  313. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work
    Needs to know
    how planes
    work

    View full-size slide

  314. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work
    Needs to know
    how planes
    work
    ⚠️

    View full-size slide

  315. DEPTH OF UNDERSTANDING
    High level
    web app
    Low level
    plane control
    Needs to know
    how browsers
    work
    Needs to know
    how planes
    work

    View full-size slide

  316. "Modern" tooling is a product of
    high-level web development

    View full-size slide

  317. time
    Innovation '
    s
    high
    level
    low
    level

    View full-size slide

  318. time
    Today'
    s
    perspective
    Innovation '
    s
    high
    level
    low
    level

    View full-size slide

  319. time
    Today'
    s
    perspective
    Innovation '
    s
    high
    level
    low
    level

    View full-size slide

  320. time
    Innovation '
    s
    high
    level
    low
    level

    View full-size slide

  321. time
    Innovation '
    s
    New, broader
    perspective
    high
    level
    low
    level

    View full-size slide

  322. Systems innovations may reciprocate
    some cautiousness & understanding

    View full-size slide

  323. Open Source can be better!

    View full-size slide

  324. My name is Justin Searls
    Please tweet me @searls &
    Say [email protected]

    View full-size slide

  325. Please say hello if your team
    could use our team's help B

    View full-size slide

  326. Like everyone, we're hiring!
    Just [email protected]

    View full-size slide

  327. Find me during a break to chat
    or to grab a sticker!

    View full-size slide

  328. My name is Justin Searls
    Please tweet me @searls &
    Say [email protected]

    View full-size slide

  329. Attribution:
    Lock designed by Sam Smith from the thenounproject.com
    Shower Curtain designed by Rohan Gupta from the thenounproject.com
    Campfire designed by VALÈRE DAYAN from the thenounproject.com
    Stand designed by Evan Travelstead from the thenounproject.com
    Shopping Cart designed by Renee Ramsey-Passmore from the thenounproject.com
    Milk designed by Jeff Seevers from the thenounproject.com
    Milk designed by NAS from the thenounproject.com
    Breakfast designed by Konrad Michalik from the thenounproject.com
    Tablet designed by Pham Thi Dieu Linh from the thenounproject.com
    Can designed by Blaise Sewell from the thenounproject.com
    Door designed by Olaus Linn from the thenounproject.com
    Door designed by Sebastian Langer from the thenounproject.com
    Box designed by David Waschbüsch from the thenounproject.com
    Tomato designed by Nana Faisal from the thenounproject.com
    Keyboard designed by misirlou from the thenounproject.com
    Computer designed by Edward Boatman from the thenounproject.com
    Hammer designed by John Caserta from the thenounproject.com
    Star designed by Edward Boatman from the thenounproject.com
    Puzzle Piece designed by Roberto Chiaveri from the thenounproject.com
    Mail designed by Anas Ramadan from the thenounproject.com
    Text designed by Christopher Holm-Hansen from the thenounproject.com
    Phone designed by Tom Walsh from the thenounproject.com
    Video designed by useiconic.com from the thenounproject.com
    Cocktail designed by Okan Benn from the thenounproject.com
    Laptop designed by Olivier Guin from the thenounproject.com
    Laptop designed by Michael Loupos from the thenounproject.com
    Airplane designed by Andrew Fortnum from the thenounproject.com
    Coupon designed by Scott Lewis from the thenounproject.com
    Database designed by Shmidt Sergey from the thenounproject.com
    Microchip designed by Martin Vanco from the thenounproject.com
    Speedometer designed by Olly Banham from the thenounproject.com

    View full-size slide