building great software by accident by garrett smith

31
Building Great Software By Accident Codemotion, Berlin 2013 Garrett Smith, CloudBees @gar1t

Upload: codemotion

Post on 07-Jul-2015

432 views

Category:

Technology


1 download

DESCRIPTION

Is it possible to build amazing software without designing it? Do we need to strictly control the development process to get great results? In this talk Garrett Smith will argue that the best software isn’t designed — it evolves! He will present a methodology based on micro iterations — very small changes — that are made using one rule: only ever do the next obvious thing! Design gives way to experimentation and accidents are not only tolerated, they’re central to the process! WARNING: Contains dangerous ideas that will leave you unsettled with a curious sense of empowerment :)

TRANSCRIPT

Page 1: Building Great Software By Accident by Garrett Smith

Building Great Software By Accident

Codemotion, Berlin 2013Garrett Smith, CloudBees@gar1t

Page 2: Building Great Software By Accident by Garrett Smith

A Cold Night,

A Long Time Ago...

Page 3: Building Great Software By Accident by Garrett Smith

Introducing: Drunken Stumble

Page 4: Building Great Software By Accident by Garrett Smith

The LeanGo "That­A­Way"

Aka "Vision", "Goal", "Objective"

Imprecise science

Not design

Page 5: Building Great Software By Accident by Garrett Smith

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

How To Drunken Stumble

Page 7: Building Great Software By Accident by Garrett Smith

Knowing Your Limitations

Page 8: Building Great Software By Accident by Garrett Smith

Lulz, but srsly

Page 9: Building Great Software By Accident by Garrett Smith

It Works!

Page 10: Building Great Software By Accident by Garrett Smith

Tuna"Counter­current 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

Design?

Page 12: Building Great Software By Accident by Garrett Smith

Example: genapp

Page 13: Building Great Software By Accident by Garrett Smith

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

"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

"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

Example: Terrible User Messages

Page 17: Building Great Software By Accident by Garrett Smith

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

Lean: More Signal, Less Noise

Page 19: Building Great Software By Accident by Garrett Smith

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

On Design

Page 21: Building Great Software By Accident by Garrett Smith

The Temptation of Design

Page 22: Building Great Software By Accident by Garrett Smith

The Problem With Design

Page 23: Building Great Software By Accident by Garrett Smith

Design?

Page 24: Building Great Software By Accident by Garrett Smith

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

Common Questions

Page 26: Building Great Software By Accident by Garrett Smith

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

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

NOT Agile!

Page 29: Building Great Software By Accident by Garrett Smith

Drunken Stumble is Suitable

Page 30: Building Great Software By Accident by Garrett Smith

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

Questions?

Twitter:   @gar1tBlog:       gar1t.com