The Whole Enchilada

The Whole Enchilada

The Whole Enchilada
Inception to delivery in just 2 weeks

* Agility & Collaboration
* Test Driven Development
* Tools of the trade
* Delivery / Open Source

We could have built a simple "hello world app" to demonstrate how we do things. That would be lame. Instead, we decided to find a local customer and demonstrate on a small scale how we rock out apps @LeanDog We will take you through the entire process from the initial planning, to testing, building, and deploying a native Android application for our local lunch favorite - Ohio City Burrito.

6b6afbaea3bf1de98975dedc5cd083c1?s=128

stevenjackson

June 01, 2013
Tweet

Transcript

  1. THE WHOLE ENCHILADA Inception to delivery in just 2 weeks

    Friday, June 14, 13
  2. We write code... and we write it well Oh... And

    we’re ON A BOAT! Friday, June 14, 13
  3. Steve Jackson @stevejxsn steve.jackson@leandog.com Dave Shah @daveshah dave.shah@leandog.com Friday, June

    14, 13
  4. 4 WE LOVE BURRITOS... Friday, June 14, 13

  5. 5 WE LOVE APPS.... Friday, June 14, 13

  6. 6 WE LOVE FEEDBACK! Friday, June 14, 13

  7. 7 MAKING ASSUMPTIONS EXPLICIT Friday, June 14, 13

  8. 8 FEATURES Friday, June 14, 13

  9. 9 LOW FIDELITY PROTOTYPING Friday, June 14, 13

  10. WE WROTE A CUKE... 10 Feature: Getting directions to Ohio

    City Burrito As a hungry burrito lover I want to drive to OCB So I can get a Brother’s Burrito Scenario: Directions button should take us to Google Maps Given I'm hungry for some OCB When I touch the map icon Then Google maps should provide me with directions Friday, June 14, 13
  11. WHAT’S A CUKE?... 11 Feature: As a hungry burrito lover

    I want to drive to OCB So I can get a Brother’s Scenario: Directions butt take us to Google Maps Given I'm hungry for som When I touch the map ico Then Google maps should with directions Friday, June 14, 13
  12. WHAT’S A CUKE?... 11 Feature: As a hungry burrito lover

    I want to drive to OCB So I can get a Brother’s Scenario: Directions butt take us to Google Maps Given I'm hungry for som When I touch the map ico Then Google maps should with directions CUKES ARE TESTS! Friday, June 14, 13
  13. WHY TEST FIRST? 12 (MORE ON THIS LATER...) Friday, June

    14, 13
  14. ATDD 13 Define Fail Fail Refactor Pass Pass Acceptance Test

    Developer Test TDD Friday, June 14, 13
  15. THREE AMIGOS 14 Knows what to build Knows how to

    build it Knows how to verify it Friday, June 14, 13
  16. OUR FIRST CUKE 15 Feature: Getting directions to Ohio City

    Burrito As a hungry burrito lover I want to drive to OCB So I can get a Brother’s Burrito Scenario: Directions button should take us to Google Maps Given I'm hungry for some OCB When I touch the map icon Then Google maps should provide me with directions Friday, June 14, 13
  17. WHY ATDD? Constant Collaboration Improved Understanding Eliminates Waste Move Risk

    Forward Bake Quality In 16 Friday, June 14, 13
  18. SOUNDS GREAT IN THEORY... LETS SEE SOME CODE! 17 Friday,

    June 14, 13
  19. TIME TRAVEL 18 Friday, June 14, 13

  20. @Override protected void onStart() { super.onStart(); ListView menuListView = (ListView)

    findViewById(id.menu_list_view); menuListView.setAdapter(new ArrayAdapter<String>( this,android.R.layout.simple_list_item_1, Arrays.asList("Burritos","Tacos","Choices and Additions"))); } Friday, June 14, 13
  21. 20 Friday, June 14, 13

  22. 20 Scenario: Checking prices Given I want to see what

    Ohio City Burrito serves When I touch the menu sign Then I should see the prices: | Brother’s Burrito | $6.15 | | Baby Burrito | $1.85 | Friday, June 14, 13
  23. 20 Scenario: Checking prices Given I want to see what

    Ohio City Burrito serves When I touch the menu sign Then I should see the prices: | Brother’s Burrito | $6.15 | | Baby Burrito | $1.85 | Friday, June 14, 13
  24. 21 Friday, June 14, 13

  25. 21 Then /^I should see the prices:$/ do |expected_items| actual_items

    = [] expected_items.raw.each do |item, expected_price| price = on(MenuScreen).price item actual_items << [item, price] end expected_items.diff! actual_items end Friday, June 14, 13
  26. 21 Then /^I should see the prices:$/ do |expected_items| actual_items

    = [] expected_items.raw.each do |item, expected_price| price = on(MenuScreen).price item actual_items << [item, price] end expected_items.diff! actual_items end Friday, June 14, 13
  27. 22 class MenuScreen include Gametel button(:directions, :id => "directions_button") button(:call,

    :id => "call_button") end Friday, June 14, 13
  28. 22 class MenuScreen include Gametel ITEM = 0 DESCRIPTION =

    1 PRICE = 2 button(:directions, :id => "directions_button") button(:call, :id => "call_button") def price(item) Gametel::Views::ListItem.new(platform, :text => item).text[PRICE] end end Friday, June 14, 13
  29. 22 class MenuScreen include Gametel ITEM = 0 DESCRIPTION =

    1 PRICE = 2 button(:directions, :id => "directions_button") button(:call, :id => "call_button") def price(item) Gametel::Views::ListItem.new(platform, :text => item).text[PRICE] end end Friday, June 14, 13
  30. And Now... LIVE CODING!!!! Friday, June 14, 13

  31. 24 SO WE MENTIONED SCIENCE... Friday, June 14, 13

  32. 25 SO WE MENTIONED SCIENCE... Friday, June 14, 13

  33. 26 SO WE MENTIONED SCIENCE... 12 Define Fail Fail Refactor

    Pass Pass Acceptance Test Developer Test TDD Friday, June 14, 13
  34. 27 SO WE MENTIONED SCIENCE... 12 Hypothesis Fail Refactor Pass

    Write a Test == Experiment Results Conclusion Repeat Friday, June 14, 13
  35. THANKS! Michael Lemley @audienceofnone Friday, June 14, 13

  36. HAPPY HACKING! https://github.com/leandog/OCBMobile Steve Jackson @stevejxsn steve.jackson@leandog.com Dave Shah @daveshah

    dave.shah@leandog.com Friday, June 14, 13