Large Scale CSS Refactoring

Large Scale CSS Refactoring

Project Ironman: the technical migration of the trivago hotel search’s existing CSS core.

Keeping technical debt low while developing a CSS base on a large scale project is a tough challenge. Even more exciting is to refactor existing CSS / frontend foundations which became cluttered.

Running into into consistency issues between code and design which slows down the development of user interface iterations is a common problem in fast growing applications when the development doesn’t follow efficient guidelines, styleguides and utilizes an efficient process. At the beginning of 2015 we began establishing a design/frontend system and improving our design-development workflow at trivago. We introduced a pattern library, started utilizing atomic design in our workflow, created new coding guidelines, and adapted several methodologies like BEM and ITCSS in order to support us in maintaining and developing our CSS/UI on a large scale.

030423e4497440d3286862d2106b8eba?s=128

Christoph Reinartz

May 28, 2016
Tweet

Transcript

  1. 3.

    Christoph Reinartz - @pistenprinz What is it?
 A description Project

    Ironman was the technical migration of the trivago hotel search's existing CSS core to a pattern library based user interface.* *) business translation for #refactorAllTheThings
  2. 5.

    Christoph Reinartz - @pistenprinz #1 Establish design and code consistency

    Introduce a Frontend / Design System into the trivago hotel search
  3. 7.

    Christoph Reinartz - @pistenprinz #3 Provide base for modern &

    sustainable UI rebuild Build modern applications fast
  4. 14.
  5. 15.
  6. 16.
  7. 17.

    Christoph Reinartz - @pistenprinz peaks at the beginning of the

    stylesheet Graph before Ironman
 Way better, but still…
  8. 20.
  9. 24.

    Christoph Reinartz - @pistenprinz #4 Inconsistency and missing Styleguide Or

    how to create fifty shades of grey or anything else
  10. 25.
  11. 26.
  12. 27.
  13. 28.
  14. 31.
  15. 33.

    Christoph Reinartz - @pistenprinz New CSS Core Old CSS Core

    normalize.css reset.css border-box content-box mobile first (min-width) desktop first (max-width) media queries inline in separate files embed SVG icon image sprites ITCSS layering [something] BEM, OOCSS [something] Post processing (MQPacker etc.) nothing improved legacy / fallback handling [something]
  16. 36.
  17. 38.

    Christoph Reinartz - @pistenprinz Retain the existing Layout & Design

    integrate the new CSS framework base which was developed with the Pattern Library without changing the appearance of the site
  18. 41.

    Christoph Reinartz - @pistenprinz _declarations includes mixins mobile includes layout.scss

    elements.scss modules.scss dealform.scss layout.scss elements.scss modules.scss dealform.scss
  19. 44.

    Christoph Reinartz - @pistenprinz #1 Refactor > 50k LOC of

    Scss Rewrite / adapt the whole Scss Base
  20. 45.
  21. 50.

    Christoph Reinartz - @pistenprinz How to tell management that you

    need 4 weeks of feature freeze and the User Interface will look exactly the same afterwards? Developer goes Marketing
  22. 51.

    Code / Process Audits How to tell management that you

    need you need 4 weeks of feature freeze and the User Interface will exactly look the same afterwards?
  23. 55.
  24. 57.

    Christoph Reinartz - @pistenprinz 9 Front-End Devs 3 Designers 2

    QA Release Engineer Management Back-End Devs Performance Lead UBolt UXBolt Product Owner
  25. 58.

    Christoph Reinartz - @pistenprinz The (lean) Process 3 Meetings +17

    Stand-Ups … and a Kanban board with 67 Post-Its and a slack-channel is all we needed
  26. 67.
  27. 68.
  28. 70.
  29. 71.
  30. 76.

    trv-blue-light #3f9fc1 trv-red-light #d67763 trv-green-light #8cba3f trv-green-lighter #b2d17f trv-green-dark #4c7b00

    trv-juri-light #697379 trv-juri-lighter #9ba2a6 trv-juri-lightest #ebeced trv-blue-dark #005f81 trv-blue #007fad trv-orange #f48f00 trv-red #c94a30 trv-orange-dark #b76b00 trv-orange-light #f6ab3f trv-blue-lightest #e5f2f6 trv-red-lightest #f9ecea trv-orange-lightest #fdf3e5 trv-red-dark #963724 trv-green #66a400 trv-juri #37454d trv-juri-dark #293339 16 12 18 16 12 12 18 12 18 16 * trv-juri-very-light #cdd0d2 trv-red-very-light #f1d1cb trv-green-very-light #d8e8bf trv-orange-very-light #fce3bf trv-blue-very-light #bfdfea trv-red-lighter #e4a49b trv-orange-lighter #f9c780 trv-blue-lighter #7fbfd6 trv-green-lightest #eff5e5
  31. 77.
  32. 79.

    description details infobig hotelconnect smiley heart towel star pictures wifi

    spa beach breakfast pool pet golf tv family eco parking bed_single bed_double bed_small couple universal home menu share edit checkout checkin general rates faq_circle faq info_circle info arrow_right_circle arrow_left_circle arrow_down_circle arrow_up_circle arrow_right arrow_left arrow_down arrow_up tick exclamation x plus minus image media bag chair team candy journalist news hoteltest plus_circle minus_circle x_circle filter dashboard statistics hotel2 hotel travel2 travel booking hotelchain upload delete tick_circle exclamation_circle contact profile info product history giveback lock calendar search publisher career comment download map smiley_belowaverage smiley_satisfactory smiley_good smiley_verygood smiley_excellent smiley_belowaverage smiley_satisfactory smiley_good smiley_verygood smiley_excellent level sort department poi_citycentre poi_airport poi_sight poi_conference poi_harbor poi_mainstation poi_nature poi_nightlife poi_sports filterreset join thin share2 movie call piechart diagram music multimedia wifi spa beach breakfast pool pet golf tv family eco parking bed_single bed_double bed_small couple universal home menu share edit checkout checkin general rates description details infobig hotelconnect smiley heart towel star pictures icn_profile icn_info icn_product icn_history icn_giveback icn_lock icn_calendar icn_search icn_publisher icn_career icn_comment icn_download icn_map icn_dashboard icn_statistics icn_hotel2 icn_hotel icn_travel2 icn_travel icn_booking icn_hotelchain icn_upload icn_delete icn_tick_circle exclamation_circle contact image media bag chair team candy journalist news hoteltest plus_circle minus_circle x_circle icn_filter arrow_right_circle arrow_left_circle arrow_down_circle arrow_up_circle arrow_right arrow_left arrow_down arrow_up tick exclamation x plus minus faq_circle faq info_circle info smiley_belowaverage smiley_satisfactory smiley_good smiley_verygood smiley_excellent smiley_belowaverage smiley_satisfactory smiley_good smiley_verygood smiley_excellent level sort department poi_citycentre poi_airport poi_sight poi_conference poi_harbor poi_mainstation poi_nature poi_nightlife poi_sports join thin filterreset share2 movie call piechart diagram music multimedia
  33. 80.

    Christoph Reinartz - @pistenprinz peaks at the beginning of the

    stylesheet Graph before Ironman
 Way better, but still…
  34. 81.

    Christoph Reinartz - @pistenprinz New CSS base Adapted old UI

    components. Can now be easily rebuilt! SVG Graph after Ironman
 Improved curve…