Rewriting code and culture - RubyConf.pt

Rewriting code and culture - RubyConf.pt

4d1993f91aa4f2efccf08051205e3bad?s=128

Sabrina Leandro

September 16, 2015
Tweet

Transcript

  1. 6.
  2. 10.
  3. 11.
  4. 12.
  5. 13.

    That is, where the impact of the changes will be

    seen sooner. Start where it hurts the most
  6. 17.

    Build a new, simplified web app based on core iPhone

    features so that we can improve the immediate velocity roadblocks and move onto building quickly on top of this core foundation. One main goal
  7. 24.

    Deleting your favourite features is hard! But when you know

    your product, you can be ruthless. Deleting is faster than rewriting
  8. 28.

    Cost of making a small change must be small. Fast

    release cycle needs fast build Delete or rewrite tests.
  9. 29.

    Cost of making a small change must be small. Monitor

    errors in production. Fast release cycle needs fast build Delete or rewrite tests.
  10. 33.

    Release cycle is more than software development. Give developers the

    right context, and trust them to make the right decisions. Learn to iterate
  11. 36.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css
  12. 38.

    controllers/ events_controller. rb models/ event.rb page_models/ event.rb event/ brief.rb models/

    event.rb services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class EventsController < ApplicationController def show @page = PageModels::Event.new(event) end end
  13. 39.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class PageModels::Event < PageModels::Base def brief PageModels::Event::Brief.new( @event) end end
  14. 40.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class PageModels::Event::Brief def event_title @event.festival? ? @event.festival_name : @event.headliners.first.name end end
  15. 41.
  16. 44.

    p { color: #000000; } p { color: #008000 !important;

    } p { color: #f80046 !really-important!; }
  17. 46.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css show.html.erb <div class=“primary”> <%= component(:brief, @page.brief)%> </div> _brief.html.erb <div class=“component brief”> <h1><%= brief.event_title %></h1> </div>
  18. 47.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event- brief.css event.css @import ‘components/event- brief.css’; event-brief.css .brief h1 { color: #000000; } .brief p { color: #f80046; }
  19. 50.

    controllers/ events_controller. rb models/ event.rb page_models/ event.rb event/ brief.rb models/

    event.rb services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class EventsController < ApplicationController def show @event = Event.find(params[:id]) … end end class Event < ActiveRecord::Base end
  20. 51.

    controllers/ events_controller. rb models/ event.rb page_models/ event.rb event/ brief.rb models/

    event.rb services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class EventsController < ApplicationController def show event = Models::Event.from_id params[:id] @page = PageModels::Event.new(event) end end
  21. 52.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings.rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class Models::Event def self.from_id(id) data = Services.event_listings.event_ from_id(id) new(data) end def initialize(data) @id = data[‘id’] @date = Date.parse(data[‘date’]) # etc. end end
  22. 53.

    controllers/ events_controller.rb models/ event.rb page_models/ event.rb event/ brief.rb models/ event.rb

    services/ event_listings. rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class Services::EventListings def event_from_id(id) ar_event = ::Event.find(id) ar_event.to_hash end end class Event < ActiveRecord::Base def to_hash { 'id' => id, 'date' => date.to_s, # etc. } end end
  23. 55.

    controllers/ events_controller.rb models/ page_models/ event.rb event/ brief.rb models/ event.rb services/

    event_listings. rb views/ events/ _brief.html.erb show.html.erb assets/ stylesheets/ event.css components/ event-brief.css class Services::EventListings def event_from_id(id) response = http.get(“/events/#{id}") JSON.parse(response.body) end end
  24. 59.
  25. 60.
  26. 64.
  27. 71.

    • Shared language • Small and frequent releases • Iterate

    design and product development Culture in practice
  28. 77.

    Learn to collaborate and work in a cross-functional team. For

    happier teams, better products, and even improved code quality. Rewriting culture
  29. 78.

    Links The Client side of SOA http://devblog.songkick.com/2012/08/30/the-client- side-of-soa/ Path to

    SOA http://devblog.songkick.com/2012/09/06/the-path-to- soa/ Our object-based Rails frontend http://devblog.songkick.com/2012/09/14/our-object- based-rails- frontend/