Date post: | 07-Jul-2015 |
Category: |
Technology |
Upload: | codemotion |
View: | 433 times |
Download: | 1 times |
Building Great Software By Accident
Codemotion, Berlin 2013Garrett Smith, CloudBees@gar1t
A Cold Night,
A Long Time Ago...
Introducing: Drunken Stumble
The LeanGo "ThatAWay"
Aka "Vision", "Goal", "Objective"
Imprecise science
Not design
The StumbleOnly ever do the next obvious thing
Steps are sequential, automatic and reflexive
Minimize thinking, maximize acting
Erratic with some mistakes accidents
How To Drunken Stumble
Knowing Your Limitations
Lulz, but srsly
It Works!
Tuna"Countercurrent exchange" circulatory and respiratory system
Max speed 75 km/h (47 mph) (max manmade submersible 61 km/h)
Depressible dorsal fins
Design?
Example: genapp
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
"Design" DecisionsBash (vs Python, Perl, Ruby, Java, etc.)
Plugins (user space)
Extensions (genapp/core space)
Coordinated Setup
"Great" Software?Not perfect
Not necessarily beautiful
No moral prerogative
Works
Will work better over time
Example: Terrible User Messages
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
Lean: More Signal, Less Noise
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
On Design
The Temptation of Design
The Problem With Design
Design?
The ProcessImagine a thing (lean)
Tinker with thing in mind (stumble)
Once you have something good, claim it was your idea (lie)
Common Questions
ExperienceAffects "lean"
Affects "obviousness"
Does not otherwise affect the process
If you don't have a stumble reflex, you ain't goin' nowhere
ObviousCarefully chosen term
Deliberately subjective
Very hard to achieve, especially in groups
Real work
Usually trivial to implement
NOT Agile!
Drunken Stumble is Suitable
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
Questions?
Twitter: @gar1tBlog: gar1t.com