![Page 1: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/1.jpg)
Building Great Software By Accident
Codemotion, Berlin 2013Garrett Smith, CloudBees@gar1t
![Page 2: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/2.jpg)
A Cold Night,
A Long Time Ago...
![Page 3: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/3.jpg)
Introducing: Drunken Stumble
![Page 4: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/4.jpg)
The LeanGo "ThatAWay"
Aka "Vision", "Goal", "Objective"
Imprecise science
Not design
![Page 5: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/5.jpg)
The StumbleOnly ever do the next obvious thing
Steps are sequential, automatic and reflexive
Minimize thinking, maximize acting
Erratic with some mistakes accidents
![Page 6: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/6.jpg)
How To Drunken Stumble
![Page 7: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/7.jpg)
Knowing Your Limitations
![Page 8: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/8.jpg)
Lulz, but srsly
![Page 9: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/9.jpg)
It Works!
![Page 10: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/10.jpg)
Tuna"Countercurrent exchange" circulatory and respiratory system
Max speed 75 km/h (47 mph) (max manmade submersible 61 km/h)
Depressible dorsal fins
![Page 11: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/11.jpg)
Design?
![Page 12: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/12.jpg)
Example: genapp
![Page 13: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/13.jpg)
genappAgent based software deployments across CloudBees
Supports any software stack via plugins (30 and counting)
Easy to aggregate plugins to install complex systems
Easy to build plugins
![Page 14: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/14.jpg)
"Design" DecisionsBash (vs Python, Perl, Ruby, Java, etc.)
Plugins (user space)
Extensions (genapp/core space)
Coordinated Setup
![Page 15: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/15.jpg)
"Great" Software?Not perfect
Not necessarily beautiful
No moral prerogative
Works
Will work better over time
![Page 16: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/16.jpg)
Example: Terrible User Messages
![Page 17: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/17.jpg)
Wait, What?# bees app:deploy -a spike/jetty2 -t java target/helloworld-1.0-SNAPSHOT.jarDeploying application spike/jetty2 (environment: ): target/helloworld-1.0-SNAPSHOT.jarApplication parameters: {containerType=java}........................uploaded 25%........................uploaded 50%........................uploaded 75%........................upload completeddeploying application to server(s)...May 7, 2013 9:39:13 AM com.cloudbees.api.BeesClient applicationDeployArchiveSEVERE: Invalid application deployment response: spike/jetty2com.cloudbees.api.BeesClientException: Server.InternalError - java.lang.IllegalArgumentException: plugin_setup_error: java 1 Creating application skeleton at /var/genapp/apps/c7d53a51Copying application files to /var/genapp/apps/c7d53a51/appInstalling genapp java agentWriting configuration to /var/genapp/apps/c7d53a51/.genapp/control/configUsing JAVA at /opt/java7/bin/javaMissing required metadata java_class - plugin_setup_error: java 1 Creating application skeleton at /var/genapp/apps/c7d53a51Copying application files to /var/genapp/apps/c7d53a51/appInstalling genapp java agentWriting configuration to /var/genapp/apps/c7d53a51/.genapp/control/configUsing JAVA at /opt/java7/bin/javaMissing required metadata java_class
at com.cloudbees.api.BeesClient.readResponse(BeesClient.java:1121) at com.cloudbees.api.BeesClient.applicationDeployArchive(BeesClient.java:638) at com.cloudbees.sdk.commands.app.ApplicationDeploy.execute(ApplicationDeploy.java:320) at com.cloudbees.sdk.commands.Command.run(Command.java:180) at com.cloudbees.sdk.commands.Command.run(Command.java:93) at com.cloudbees.sdk.Bees.run(Bees.java:142) at com.cloudbees.sdk.Bees.main(Bees.java:336) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.cloudbees.sdk.boot2.BeesLoader.run(BeesLoader.java:159) at com.cloudbees.sdk.boot2.BeesLoader.main(BeesLoader.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.cloudbees.sdk.boot.Launcher.main(Launcher.java:64)
ERROR: Server.InternalError - java.lang.IllegalArgumentException: plugin_setup_error: java 1 Creating application skeleton at /var/genapp/apps/c7d53a51Copying application files to /var/genapp/apps/c7d53a51/appInstalling genapp java agentWriting configuration to /var/genapp/apps/c7d53a51/.genapp/control/configUsing JAVA at /opt/java7/bin/javaMissing required metadata java_class - plugin_setup_error: java 1 Creating application skeleton at /var/genapp/apps/c7d53a51Copying application files to /var/genapp/apps/c7d53a51/appInstalling genapp java agentWriting configuration to /var/genapp/apps/c7d53a51/.genapp/control/configUsing JAVA at /opt/java7/bin/javaMissing required metadata java_class
![Page 18: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/18.jpg)
Lean: More Signal, Less Noise
![Page 19: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/19.jpg)
The StumbleIdentified 4 possible next steps
Nothing obvious initially
My initial "next obvious" turned out to be obviously not
After stress free, open consideration, one step became truly obviously next
![Page 20: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/20.jpg)
On Design
![Page 21: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/21.jpg)
The Temptation of Design
![Page 22: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/22.jpg)
The Problem With Design
![Page 23: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/23.jpg)
Design?
![Page 24: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/24.jpg)
The ProcessImagine a thing (lean)
Tinker with thing in mind (stumble)
Once you have something good, claim it was your idea (lie)
![Page 25: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/25.jpg)
Common Questions
![Page 26: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/26.jpg)
ExperienceAffects "lean"
Affects "obviousness"
Does not otherwise affect the process
If you don't have a stumble reflex, you ain't goin' nowhere
![Page 27: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/27.jpg)
ObviousCarefully chosen term
Deliberately subjective
Very hard to achieve, especially in groups
Real work
Usually trivial to implement
![Page 28: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/28.jpg)
NOT Agile!
![Page 29: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/29.jpg)
Drunken Stumble is Suitable
![Page 30: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/30.jpg)
In ConclusionIt's more efficient not to design
If your design has flaws, Drunken Stumble will fix them
If your design is perfect, Drunken Stumble will get there anyway
![Page 31: Building Great Software By Accident by Garrett Smith](https://reader033.vdocument.in/reader033/viewer/2022042816/559b4f8c1a28ab383b8b45d5/html5/thumbnails/31.jpg)
Questions?
Twitter: @gar1tBlog: gar1t.com