KEYNOTE
Dr Nic Williams
@drnic | drnicwilliams.com
VP Dev Evangelism, Engine Yard
Slide 2
Slide 2 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 3
Slide 3 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 4
Slide 4 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 5
Slide 5 text
GO GO FAST AS
A DEVELOPER
Dr Nic Williams
@drnic | drnicwilliams.com
VP Dev Evangelism, Engine Yard
Slide 6
Slide 6 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 7
Slide 7 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 8
Slide 8 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 9
Slide 9 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
STORY #1
In the beginning
Slide 10
Slide 10 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2006
1
Slide 11
Slide 11 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2006 mid 2009
1 75
Slide 12
Slide 12 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
the problem
http://www.infoq.com/presentations/williams-open-source
Slide 13
Slide 13 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
How do you go fast
whilst living with the
consequences of your creations?
Slide 14
Slide 14 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2006 mid 2012
mid 2009
257
Slide 15
Slide 15 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
What is “go fast”?
Slide 16
Slide 16 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
to go fast:
quickly iterating towards your goals
Slide 17
Slide 17 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 18
Slide 18 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
experiments
small batches
continuous deployment
Slide 19
Slide 19 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
1.
2. 3...
Slide 20
Slide 20 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
start fast
stay fast
hand off continuously
Slide 21
Slide 21 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
generators
dev tools
deployment tools
Slide 22
Slide 22 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
“go slow”?
• Add features that aren’t important
• Fix bugs that aren’t important
• Maintain unimportant features
• Do all the work yourself
Slide 23
Slide 23 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
start fast
stay fast
hand off continuously
Slide 24
Slide 24 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
start
fast
• Create and use generators
• If low cost to create, low cost to
throw away
• Bootstrap your universe
Slide 25
Slide 25 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
stay
fast
• Internal generators
• Dev & deployment tools
• Code Gardening
Slide 26
Slide 26 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
hand off
continuously
• Bootstrapping new developers
• Document continuously
• Homogenous codebases
• Promote contributors
Slide 27
Slide 27 text
STORY #2
Start fast -
Application generators
Slide 28
Slide 28 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2006
1
mid 2012
mid 2009
257
Slide 29
Slide 29 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2005 mid 2006
0 257
mid 2012
Slide 30
Slide 30 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
first
projects
• composite_primary_keys
• dr_nic_magic_models
Slide 31
Slide 31 text
YOUR COMPANY NAME | LONG AND INTERESTING PRESENTATION TITLE | VERSION NO. XX | 06 /02/2012
$
rails
new
bigidea
$
rails
g
model
Post
$
rake
db:migrate
$
ey
deploy
missing
concepts
Slide 32
Slide 32 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
$ appscrolls new bigidea -s postgresql \
twitter_bootstrap github eycloud
install it
store it
deploy it
Slide 33
Slide 33 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
ruby in 2006
• Rails - nice structure, generators,
textmate support
• Rails plugins - nice structure, generator
• RubyGems/Ruby - no structure, no tools
Slide 34
Slide 34 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
structure
ruby code?
• Jay Fields: “How would you
structure a (non-Rails) Ruby
project?”
• http://blog.jayfields.com/
2006/10/ruby-project-tree.html
Slide 35
Slide 35 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
newgem
Slide 36
Slide 36 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
newgem
hoe
Scaffold
Dev & Deploy tools
Slide 37
Slide 37 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
your company
best practices
• How do applications look?
• How are they deployed?
• Document best practices
• Generate best practises
Slide 38
Slide 38 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
“It’s not Rails best practice
until it’s in the generators”
Jeff Casimir at JRubyConf
Slide 39
Slide 39 text
STORY #3
Stay fast -
component generators
Slide 40
Slide 40 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Start fast
Stay fast
$
rails
new
bigidea
$
rails
g
model
Post
Slide 41
Slide 41 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Let’s make a generator!
Slide 42
Slide 42 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 43
Slide 43 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
$ thor :thing foo
exist
create lib/foo.rb
create spec/foo_spec.rb
$ thor :thing bar
exist
create lib/bar.rb
create spec/bar_spec.rb
Slide 44
Slide 44 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 45
Slide 45 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 46
Slide 46 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
# Thorfile
require 'active_support/inflector'
class Default < Thor
include Thor::Actions
attr_reader :name
source_root File.expand_path("../templates", __FILE__)
desc "thing NAME", "Create a new thing"
def thing(name)
@name = name
directory "thing", "."
end
end
example at https://github.com/drnic/things
Slide 47
Slide 47 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
$ rails g
Usage: rails generate GENERATOR [args]
...
Bootstrap:
bootstrap:install
bootstrap:layout
bootstrap:themed
Coffee:
coffee:assets
Cucumber:
cucumber:install
rails
generators
Slide 48
Slide 48 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
appscrolls
gem_group :test do
gem 'cucumber-rails', :require => false
gem 'capybara'
gem 'database_cleaner'
end
after_bundler do
rake "db:create"
generate "cucumber:install"
end
Slide 49
Slide 49 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
textmate
bundles
Slide 50
Slide 50 text
STORY #4
Stay fast -
code gardening
Slide 51
Slide 51 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
mid 2006
1
mid 2012
mid 2009
257
Slide 52
Slide 52 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
code Gardening
Slide 53
Slide 53 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 54
Slide 54 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
me
previous me future me
Slide 55
Slide 55 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
send love
letters to
future you
code
Gardening
Slide 56
Slide 56 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Track your
gardening
• http://gitalytics.com/user
• Search for @you
• Gardened ___ repos
$('#contribs_table tr').size()
Slide 57
Slide 57 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
Slide 58
Slide 58 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
Slide 59
Slide 59 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
Slide 60
Slide 60 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
• @leshill - 56
Slide 61
Slide 61 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
• @leshill - 56
• @bmizerany - 94
Slide 62
Slide 62 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
• @leshill - 56
• @bmizerany - 94
• @schacon - 137
Slide 63
Slide 63 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
• @leshill - 56
• @bmizerany - 94
• @schacon - 137
• @tenderlove - 143
Slide 64
Slide 64 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Top gardeners
speakers
• @deadprogrammer - 46
• @geemus - 55
• @leshill - 56
• @bmizerany - 94
• @schacon - 137
• @tenderlove - 143
• @drnic - 257
Slide 65
Slide 65 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
crowd
interactive
gardeners
• Edwdin - @softr8 - 11
• Mario - @mariochavez - 15
Slide 66
Slide 66 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
how to
garden
• bundle
list
• pick one & download its source
• try to use it
• fix README & docs for next person
Slide 67
Slide 67 text
STORY #5
Hand off continuously
Slide 68
Slide 68 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
newgem
history
• 2006 - create files & folders
• 2007 - using rubigen - Rails’ own
generator system
• 2010 - abandoned - “bundle gem”
Slide 69
Slide 69 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
“There is no bigger destroyer
of creative potential
than the misguided decision
to persevere”
Slide 70
Slide 70 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
you cannot write
today’s code
If you’re stuck on
Yesterday’s coDE
Slide 71
Slide 71 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
is this your
old code?
Slide 72
Slide 72 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
need more
Docs?
generators?
tests?
• For each file/class/module
• Why does it exist?
• How do you use it?
• Answer in documentation/
generators/tests
Slide 73
Slide 73 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
remember:
go faster
• without interruption
• reduce work on old code
• “what to do next?” quickly
Slide 74
Slide 74 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
start fast
stay fast
hand off continuously
Slide 75
Slide 75 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 76
Slide 76 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
Slide 77
Slide 77 text
DR NIC | GO GO FAST AS A DEVELOPER | MAGMARAILS 2012
start fast
stay fast
hand off continuously