Rapid Prototyping
Yevgeniy Brikman
Go from an idea to working code quickly.
Why?
1. Build products faster
Why?
1. Build products faster
2. ???
Why?
1. Build products faster
2. ???
3. Profit!!
Why?
1. Build products faster
2. ???
3. Profit!!
Why?
1. Build products faster
2. Build products of higher quality
3. Profit!!
Why?
1. Build products faster
2. Build products of higher quality
3. Become a better engineer
Outline
1. Instant Feedback
2. Leverage
3. Beyond prototypes
Instant Feedback
The antithesis of rapid prototyping.
Change the code
Change the code See the result
Change the code See the result
Should be as close to 0 as possible
Use dynamic/interpreted languages
1. No waiting for compilation
Use dynamic/interpreted languages
1. No waiting for compilation
2. Generally more flexible and hackable
Use dynamic/interpreted languages
1. No waiting for compilation
2. Generally more flexible and hackable
3. "A programming language is for thinking of
programs, not for expressing programs
you've already thought of." [1]
[1] Paul Graham, Hackers and Painters
Use interactive languages
1. The REPL is your friend
Use interactive languages
1. The REPL is your friend
2. Some static languages support hot reload
(Play Framework, JRebel)
Use interactive languages
1. The REPL is your friend
2. Some static languages support hot reload
(Play Framework, JRebel)
3. IDEs can help too[1][2]
[1] Scala worksheet in Eclipse
[2] http://www.lighttable.com/
Push everything to the client
1. Modern browsers are powerful
Push everything to the client
1. Modern browsers are powerful
2. JS/CSS feedback loop is nearly
instantaneous
Push everything to the client
1. Modern browsers are powerful
2. JS/CSS feedback loop is nearly
instantaneous
3. Tight feedback loop in the browser often
leads to a better user experience
Demo
1. Frameworks: node-dev, express, play
2. Client-side MVC: backbone.js, underscore.js
3. In-browser: firebug, developer tools, jsfiddle,
tinkerbin
4. Other: CodeKit, apigee, js-api console
node-dev: restarts node on every change
Play Framework: modern web framework for Java and
Scala that supports hot reload
Chrome dev tools: inspect the page and change it on
the fly!
JSFiddle: create, run, and share HTML/CSS/JS snippets
right in the browser.
apigee: try out 3rd party APIs (LinkedIn, twitter, facebook,
etc) directly in the browser
Leverage
tldr: google & stackoverflow are your
friends
Don't reinvent the wheel
1. Always, always, always google first
Don't reinvent the wheel
1. Always, always, always google first
2. StackOverflow has the best answers
Don't reinvent the wheel
1. Always, always, always google first
2. StackOverflow has the best answers
3. You'll be lucky if you have a single original
idea your entire life [1]
[1] Mr. Patch, my 11th grade physics teacher
Use open source libraries
1. There is probably (more than) one for the
problem you're solving
Use open source libraries
1. There is probably (more than) one for the
problem you're solving
2. They have probably solved parts of the
problem you haven't thought of yet
Use open source libraries
1. There is probably (more than) one for the
problem you're solving
2. They have probably solved parts of the
problem you haven't thought of yet
3. Many minds are better than one
Use open source libraries
1. There is probably (more than) one for the
problem you're solving
2. They have probably solved parts of the
problem you haven't thought of yet
3. Many minds are better than one
4. Bonus: learn from their code
Demo
1. Backend: node modules, node toolbox,
ruby toolbox, mongo
2. JS: jQuery (UI, tools), backbone, underscore
3. UI: bootstrap, jetstrap, google fonts,
compass
4. Other: node.js screen scraping, lorem ipsum,
placekitten.com, localtunnel
ruby-toolbox: open source ruby libraries, broken down
by category, ranked by popularity and quality.
node-toolbox: open source node.js libraries, broken
down by category, ranked by popularity and quality.
jquery: the de-fact cross-browser JS library. Don’t leave
home without it.
underscore: dozens of extremely useful javascript
functions. The most popular library in npm.
bootstrap: frontend framework that makes it easy to
create a clean, responsive UI, even if you aren’t a CSS pro.
Google fonts: free fonts to use in your app
localtunnel: a quick way to share an app running on
localhost with the outside world
Beyond prototyping
All software development is trial and error.
A canvas or sketchbook serves as an
"external imagination", where an artist can
grow an idea from birth to maturity by
continuously reacting to what's in front of
him [1]
[1] Bret Victor, Learnable Programming
Only about 10% of the UI code written to
craft the experience lasted more than a year.
90% of the UI code needed to be thrown
away. [1]
[1] Bill Scott, The Experimentation Layer
Time
Maturity
Mature, stable
Proof of concept
Product development (technology comparison)
Dynamic/interpreted
languages Static languages
Idea
Time
Maturity
Mature, stable
Proof of concept
Dynamic/interpreted
languages Static languages
Innovation
Advantage
Product development (technology comparison)
Idea
Time
Maturity
Mature, stable
Proof of concept
RoR, Play
Servlets, Spring
Innovation
Advantage
Product development (framework comparison)
Idea
Time
Maturity
Mature, stable
Proof of concept
Agile, Scrum
Waterfall
Innovation
Advantage
Product development (development method comparison)
Idea
Faster can mean higher quality
1. In a trial and error world, getting to errors
faster is the key to success
Faster can mean higher quality
1. In a trial and error world, getting to errors
faster is the key to success
2. Making more errors leads to better software
and better engineers
Faster can mean higher quality
1. In a trial and error world, getting to errors
faster is the key to success
2. Making more errors leads to better software
and better engineers
3. Speed wins [1]
[1] A handwritten note on the door to the office of Stephen Kaufer, TripAdvisor CEO

Rapid prototyping