Project Ironman - Large Scale CSS Refactoring at trivago (2nd edition)

Project Ironman - Large Scale CSS Refactoring at trivago (2nd edition)

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.

The talk will provide backgrounds, insights, learnings and technical approaches of refactoring a CSS base on a large scale project including its scope, the outcome and the business value.

030423e4497440d3286862d2106b8eba?s=128

Christoph Reinartz

April 14, 2016
Tweet

Transcript

  1. 2.

    Ironman release picture Crazy Guy Talking to you 
 right

    now Does something with frontend at trivago Loves giving presentations U.Bolt Performance Unicorn
  2. 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
  3. 4.

    Code / Process Audits Project Ironman was the technical migration

    of the trivago hotel search's existing CSS core to a pattern library based user interface.* The official JIRA task
 A description
  4. 6.

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

    Introduce a Frontend / Design System into the trivago hotel search
  5. 8.

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

    sustainable UI rebuild Build modern applications fast
  6. 10.

    Christoph Reinartz - @pistenprinz Atomic Design
 Explained in one gif

    http://bradfrost.com/blog/post/atomic-design-in-one-gif/
  7. 18.
  8. 19.
  9. 20.
  10. 21.
  11. 23.

    Christoph Reinartz - @pistenprinz Graph before ironman
 Way better, but

    still … peaks at the beginning of the stylesheet
  12. 24.
  13. 27.
  14. 29.
  15. 32.

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

    how to create fifty shades of grey or anything else
  16. 33.

    Code / Process Audits • IE7 support • Layout built

    on reset.css • too complex CSS structure
  17. 36.

    Christoph Reinartz - @pistenprinz #1 Normalize.css incl. border- box switch

    Replace reset.css and remove content-box for box-sizing
  18. 38.

    Christoph Reinartz - @pistenprinz #3 Replace image sprites with SVGs

    and Fallback Icon solution based on Grunticon
  19. 40.

    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
  20. 42.

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

    Scss Rewrite / adapt the whole Scss Base
  21. 43.
  22. 49.

    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
  23. 50.

    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?
  24. 55.

    Christoph Reinartz - @pistenprinz #? How to integrate such a

    project into an existing process? Don’t harm the existing process
  25. 60.

    Christoph Reinartz - @pistenprinz #2 Commitment over estimation* Interested to

    know when you are done, or interested to be as fast as possible?
 *) only works if you meet the deadline
  26. 61.

    Christoph Reinartz - @pistenprinz #3 Make progress transparent & involve

    everybody Update the stakeholders as often as possible
  27. 62.

    Christoph Reinartz - @pistenprinz #4 Motivate people and let them

    be awesome Hire awesome people and get out of their way
  28. 64.
  29. 66.

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

    QA Release Engineer Management Back-End Devs Performance Lead UBolt UXBolt Product Owner
  30. 67.

    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
  31. 75.

    Christoph Reinartz - @pistenprinz Code / Process Audits • Foundation

    built to move the UI Development to the next level • Better rendering performance on mobile • Shared knowledge and understanding throughout, between all developers and the entire design/product team CSS Selectors Before and after 7009 vs 5605
  32. 76.

    Christoph Reinartz - @pistenprinz Code / Process Audits • Foundation

    built to move the UI Development to the next level • Better rendering performance on mobile • Shared knowledge and understanding throughout, between all developers and the entire design/product team CSS Rules Before and after 5817 vs 4870
  33. 77.

    Christoph Reinartz - @pistenprinz Code / Process Audits • Foundation

    built to move the UI Development to the next level • Better rendering performance on mobile • Shared knowledge and understanding throughout, between all developers and the entire design/product team CSS Declarations Before and after 13500 vs 11300
  34. 78.

    Code / Process Audits • 1 Project Team • 7

    awesome developers • infinite supporters
  35. 80.
  36. 81.
  37. 83.
  38. 84.
  39. 89.

    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
  40. 91.

    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
  41. 93.

    Christoph Reinartz - @pistenprinz Graph before Ironman
 Way better, but

    still … peaks at the beginning of the stylesheet
  42. 94.

    Christoph Reinartz - @pistenprinz Graph after Ironman
 Improved curve New

    CSS base Adapted old UI components. Can now be easily rebuilt! SVG
  43. 99.

    Christoph Reinartz - @pistenprinz <3 Foundation built to move the

    UI to the next level Sustainable base to continue UI rebuild
  44. 101.