First came tools: programming languages, version control, testing, build automation and eventually continuous delivery. Somewhere along the tools curve, we began seeing that our process wasn't working and that we needed shorter, faster experimentation with better feedback cycles and communication, which produced Agile. Now that we have much better tools and processes (both of which continue to improve), what is the next big step in the evolution of software development, and development in general? Now that we've gotten pretty good at building things, I believe we need to get better at discovering good things to build. After a brief history of tools and processes, I will look at this need and explore how we must change our perspectives to address our next big challenge.
Phase 3: Better ideas (Presentation at SalesForce 1-28-2015)
1. Phase 3: Better Ideas
Bruce Eckel
www.MindviewInc.com
www.AtomicScala.com
Jan 28, 2015, San Francisco
@Salesforce
Slides available on
www.slideshare.net
2. Overview
• Who Am I
– A Languages Guy
– Trying to move tech
forward
• Do Languages Matter?
– Not so much anymore
• Phase 2: Better Communication & Process
– Agile: Build Things Better
• Phase 3: Build Better Things
– Challenge: Getting (and Nurturing) Better Ideas
15. • Assembly -> C
• C -> C++
• C++ -> Java
–Virtual Machines
–Garbage Collection
• Statically typed vs. Dynamic
• Checked Exceptions
• Concurrency and Parallelism
• OO vs Functional
• Java Posse Roundup stopped talking
about Java
16. • Stroustrup's Goal for C++:
Make Library Use Easier
• Java Validated Virtual
Machines & Garbage
Collection
– Lots of libraries
– Also mainstreamed the big
framework
– Invalidated checked
exceptions
• Ruby On Rails Validated
Dynamic Languages for
serious projects
– Mitigated some of the damage
from Perl & PHP (read "PHP:
A fractal of bad design")
– Helped legitimize Python,
Groovy, etc.
17. Functional language features are
the new-old thing
• Heavily motivated by multiple
cores and parallelism
• Safety via immutability
• Python started adding
functional features a few years
ago
• Functional purists are trying to
steer the conversation
("objects are bad/failures")
• Object-functional hybrids are
moving to center stage IMO
– How will parallelism look in
such languages?
– Pure functional vs CSP (as
in Go). STM has failed.
18. No Longer a Big Deal To ...
• Change Languages
– My Favorite Client:
Java -> Python -> Go
• Combine Languages
– e.g. Erlang controlling
other languages
– REST/JSON APIs
– HTML5/CSS/Javascript
UIs
19. Thus
• Arguing to consider
new languages no
longer fits my mission
-- we're not stuck
there anymore.
• Why bother arguing
when you can just
experiment?
• So...
• They kind of don't
matter
21. Agile: Prefer
• Individuals and
interactions over
processes and tools
• Working software over
comprehensive
documentation
• Customer collaboration
over contract
negotiation
• Responding to change
over following a plan
22. What Happened to Agile
• The ideas are still good
• The delivery mechanism
got infected with
industrial-age thinking
• AND: "Preferences" aren't
implementation tools
– A philosophy, not how to do it
23. What Happens to IT Innovations
• Early sucess generates delivery
companies
• Their success produces "optimized"
clones with a process for delivery
• Minimal thinking required
• Few mistakes, efficient
• Innovators leave
• We're left with fly-by, carpet-
bombing "consultants"
25. Fundamental Changes vs. Techniques
• Ultimately I want to
re-architect the
organization from the
ground up to --
among other things
--produce better ideas
(See Reinventing-
Business.com & "Teal-
Evolutionary" organizations)
• Here, I will look at
techniques to help
existing organizations
26. How Not to Get Ideas
• Industrial-Age Hierarchies Hate Change
– Designed for consistency and control
– "Wanting to be in power" does not produce
good ideas
• Consensus does not produce good ideas
– Subpar and unchangeable results
– Decision ownership is diluted
27. Ideas are Experiments
• Need a 'space' (even if only temporary)
that supports many rapid experiments
• Techniques to trick yourself out of your
normal modes of thinking (i.e. your blocks)
29. Brainstorming?
• Loudest or most
persuasive do not
produce the best ideas
• Tends to fixate on one
idea, blocks out others
• Inhibits creative
thinking
• Judging helps
• Working on your own
produces many more
ideas
30. Brain Writing
• Brings ideas from
everyone, not just
the assertives
• Very small cards
• Idea per card; 1-2
sentences
• 10 Min capturing
ideas
• “No guessing or
confessing”
31. Free Up With Improv
• Workshops and
groups are
usually findable
• The "Yes And..."
Exercise
32. Use Random Input
• Words from a
dictionary
• Pictures
• Items/toys
• Mind mapping
33. Shift
• Get another's perspective
• Play "If I Were"
• Change Environment
• Try something really different (paint!)
• Meditate
• Daydream
• Loaf/nap
• Move
34. Think in Reverse
• Create the problem
• Worsen operations
• Downgrade the
product
• Take resulting ideas
and reverse them
35. Decision Making: Google's Note & Vote
• For speed & to avoid groupthink
• Everyone quietly writes down as
many ideas as they can for 5-10 min
• 2 min: everyone quietly reviews their
own ideas and chooses one or two
• Individually share your chosen ideas,
no selling. Written on a board.
• 5 min: each person quietly writes
down their favorite idea from board
• Each person states their vote,
potentially with a brief pitch.
Captured on board with dots.
• The decider (can be anyone)
independently decides on the best
idea, respecting the votes or not.
36. Going Way Out
• Reinventing Organizations: The
Advice Process
• Anyone can make a decision,
even one that costs the company
money, as long as they:
1. Consult with someone who knows
more about the topic
2. Consult with the people affected by
the decision
• You can still make the decision if
both advise against it, so
experimentation is not stifled, but
you carry the social responsibility
37. Open Spaces
• A self-organizing
conference system
• WinterTechForum.com
• Crested Butte, Colorado
February 23-27 2015
JC Leacock Photo