Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rewriting code and culture - RubyConf.pt

Rewriting code and culture - RubyConf.pt

Sabrina Leandro

September 16, 2015
Tweet

More Decks by Sabrina Leandro

Other Decks in Technology

Transcript

  1. That is, where the impact of the changes will be

    seen sooner. Start where it hurts the most
  2. 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
  3. Deleting your favourite features is hard! But when you know

    your product, you can be ruthless. Deleting is faster than rewriting
  4. Cost of making a small change must be small. Fast

    release cycle needs fast build Delete or rewrite tests.
  5. Cost of making a small change must be small. Monitor

    errors in production. Fast release cycle needs fast build Delete or rewrite tests.
  6. Release cycle is more than software development. Give developers the

    right context, and trust them to make the right decisions. Learn to iterate
  7. 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
  8. 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
  9. 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
  10. 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
  11. p { color: #000000; } p { color: #008000 !important;

    } p { color: #f80046 !really-important!; }
  12. 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>
  13. 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; }
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. • Shared language • Small and frequent releases • Iterate

    design and product development Culture in practice
  20. Learn to collaborate and work in a cross-functional team. For

    happier teams, better products, and even improved code quality. Rewriting culture
  21. 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/