building great software by accident by garrett smith

Post on 07-Jul-2015

433 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

Building Great Software By Accident

Codemotion, Berlin 2013Garrett Smith, CloudBees@gar1t

A Cold Night,

A Long Time Ago...

Introducing: Drunken Stumble

The LeanGo "That­A­Way"

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

top related