Faster! Faster!
Accelerating your business with blazing prototypes




                                        Drew Engelson
                                        @handofdoom
Why am I here?
I’m Drew Engelson
 I work for Celerity
 - “The business acceleration consultancy”
 - We help get companies “unstuck”
 I help organizations decide what tech to buy or build
 - National Geographic Society
 - PBS
 - American Diabetes Association
 Then we make it happen
First… a disclaimer
 I’m a Pythonista
 I’m a Djangonaut
 Blame OSCON 2006
Hence, my huge man-crush on JKM




Photo: Jason Samsa @ Flickr
Cultures of stagnation
Risk aversion
Always choosing path well traveled
"Innovation is R&D’s job”

     a.k.a. Not your job
Dwelling on past investments
Over-management and review of new ideas
“We have too much real work to do.”
Cultures of Innovation

   Props to Josh Linkner
Fuel passion
Celebrate ideas
Foster autonomy
Encourage courage
Fail forward
Think small
Institutionalize this stuff
COTS vs. Open Source
“COTS is the safer choice”

No one ever got fired for choosing ___________.
“COTS does it out of the box”

        That’s horse crap!
Photo: Daleeast @ Flickr
Photo: Kethera @ Flickr
Rapid Prototypes
“If only I could show you!”
Developers [sometimes] have good ideas

             Give ‘em a chance!
Reduce the potential cost of failure;
    Timebox the experiment

           “OK, you get 2 days”
The Framework Showdown
The challenge
 Build a simple, fully functional prototype
 - A basic web service for image transformation
 Requirements
 - Pass in a source image url, desired height and width
 - Pull down the image to server
 - Resize the image on the server
 - Return derivative image
The challenge

                              ur l =
                              ht t p: / / f ar m s t at i c f l i c kr . c om 7138/ 7576110858_d66eec 09f 5_z . j pg
                                                8.                           /
                              w dt h = 200
                               i
                              hei ght = 200




Photo: Tomcrenshaw @ Flickr
I’m talking REAL functional code;
    minimize throw away work

         Evolve to production
Surveyed a few frameworks
 PHP
 - Zend
 - CodeIgniter

 Python
 - Django
 - Flask
 - Bottle




                     I know, there are many other choices… Which is your favorite?
Compared on
 Learning curve
 Ease of bootstrapping dev environment
 Ease of development
  - # of files created or touched
  - # of lines written or modified
  - Complexity of code
 Speed of deployment
  - Need to share with others, right?




 Note: This is a very non-scientific study
The non-scientific results
$ pip install Flask requests PIL

     Then write ~19 lines of Python
i mp o r t c S t r i n g I O

i mp o r t r e q u e s t s
f r o m PI L i mp o r t I mag e
f r o m f l as k i mp o r t F l as k , r e q u e s t , s e n d _ f i l e

ap p = F l as k ( _ _ n ame _ _ )

@ap p . r o u t e ( ' / ' , me t h o d s = [ ' GET' , ] )
d ef res i z e( ) :
        u r l = r e q u e s t . val u e s [ ' u r l ' ]
        r e q = r e q u e s t s . ge t ( u r l )
        r e s o u r c e = c S t r i n g I O. S t r i n g I O( r e q . c o n t e n t )
        i mag e = I mag e . o p e n ( r e s o u r c e )
        i mag e = i mag e . r e s i z e ( ( i n t ( r e q u e s t . val u e s [ ' w' ] ) ,
i n t ( r e q u e s t . val u e s [ ' h ' ] ) ) ,
                I mag e . ANTI AL I AS )
        r e s o u r c e = c S t r i n g I O. S t r i n g I O( )
        i mag e . s ave ( r e s o u r c e , ' JPEG' )
        r e s o u r c e . s e e k ( 0)
        r e t u r n s e n d _ f i l e ( r e s o u r c e , mi me t yp e = ' i mag e / j p e g ' )

i f _ _ n ame _ _ = = ' _ _ mai n _ _ ' :
      ap p . r u n ( d e b u g = Tr u e )
Quick and easy local server

   Django: manage.py runserver
         Flask: app.run()
Get boilerplate out of the way!
Don’t trust anything that has built-in smilies 

                 Sorry, CodeIgniter
How do I share it?
$ git push heroku master

Really... does anything else matter?
What does this all mean?
Use what you know!

Learning curve is biggest time suck.
Keep it real

Don’t assume failure… this may have legs.
Don’t be afraid of…

Failure; the unknown; the undead
Give ‘em a little rope…

  But don’t hang ‘em with it
Hold a few “hack days”
Spread knowledge;
Hold sessions to share ideas

     I call these “mind melds”
Increased pace of innovation leads to…
Happier developers leads to…
Greater productivity leads to…
GOTO 50
Resources
 http://flask.pocoo.org/
 https://www.djangoproject.com/
 http://codeigniter.com/
 http://bottlepy.org/
 http://framework.zend.com/


 Josh Linkner
- http://www.inc.com/articles/201106/josh-linkner-7-steps-to-a-culture-of-innovation.html




 I know, there are many other choices… What’s your favorite?
Thanks for coming!



                     Drew Engelson - @handofdoom
                     dengelson@celerity.com
                     http://www.celerity.com/

Faster! Faster! Accelerate your business with blazing prototypes

Editor's Notes

  • #4 Very wide list of technologies Personally ASP, .NET, ColdFusion, PHP, Perl, Python
  • #5 Also “What’s new in Perl 6”
  • #8 Fear of failure… but is failure necessarily a bad thing?
  • #11 Those 80’s clothes in my closet!
  • #16 Reward ideas
  • #17 Trust
  • #24 Recent discussion with a big COTS CMS platform… No customization required! What? It’s all configuration.
  • #34 Evolve to production