Your SlideShare is downloading. ×

Coding the UI


Published on

When Orbitz Worldwide released a new generation of its global technology platform there were some lofty goals for the UI. They wanted to build a presentation tier (HTML, CSS, JavaScript) that would …

When Orbitz Worldwide released a new generation of its global technology platform there were some lofty goals for the UI. They wanted to build a presentation tier (HTML, CSS, JavaScript) that would meet the goals of internationalization, accessibility, have rich Ajax interactions, and be faster and easier to develop in. This session will explore the key challenges in achieving these goals, including what worked, what didn\'t, and what\'s next.

Published in: Technology
1 Like
  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide


  • 1. Coding the UI: Lessons Learned from ebookers and Orbitz Mark Meeker AjaxWorld Architect, UI Engineering San Jose, California Orbitz Worldwide October 21, 2008
  • 2. UI Dozens of apps, hundreds of VMs, thousands of services.
  • 3. CSS JavaScript CSS 2.1 JSP XHTML 1.0 JSP 2.0 (page templating) webapp (controller layer)
  • 4. “As far as the customer is concerned, the interface is the product.” - Jef Raskin
  • 5. “Browsers are the most hostile software development environments possible.” - Douglas Crockford
  • 6. 1,971 Revisions to 1 .css file since Oct. 2006 2.9 edits per day (if working weekends)
  • 7. 2001 - 2002 - 2005 - 2006 - 2007 - 2008 -
  • 8. Experience Single JSP files measuring in thousands of lines Massive amounts of repeated markup 561 files with <html> tag Minimal re-use 66 tables on one page
  • 9. “Good judgement is the result of experience … Experience is the result of bad judgement.” —Fred Brooks
  • 10. Fresh start?
  • 11. Wishlist Internationalization Universality Maintain High Quality Code Promote Code Re-Use Consistent Experience
  • 12. Internationalization
  • 13. 6:50pm versus 18:50
  • 14. 14/11/07 versus 11/14/07
  • 15. miles versus kilometers
  • 16. 3,000+ Labels, strings, paragraphs of text.
  • 17. Traveler vs. Traveller vs. Passengers
  • 18. 1,500+ Images
  • 19. Images Remove text as much as possible Consider cultural differences in images choices
  • 20. English
  • 21. French
  • 22. Japanese
  • 23. Translation Small words can expand 200-300% Rule of thumb: 40% Watch for wrapping issues (or lack thereof) Consider during design comp stage
  • 24. Universality
  • 25. Follow Web Standards
  • 26. Follow Web Standards P.O.S.H. plain old semantic HTML Constant balancing act Reduces display defects Reset Styles Validate CSS Reminder that it is an evolving code base
  • 27. IE6 Support <!--[if IE 6]> <style type=quot;text/cssquot; media=quot;allquot;> @import url(/style/layout/layoutIE6Fix.css); </style> <![endif]-->
  • 28. Firefox 3, OSX
  • 29. IE 5.2, OSX
  • 30. Amazon Kindle
  • 31. Progressive Enhancement Content is KING! Start with semantic markup Get working functionality with HTML only Enhance display with CSS Enhance behavior with JavaScript
  • 32. Separation of Layers No in-line styles or in-line JavaScript If it only works with JavaScript, create it with JavaScript
  • 33. Graded Browser Support Varying levels of support Isn’t required to be identical Not all or nothing
  • 34. Graded Browser Support A-Grade White-list (well-known, measurable market share) Tested by QA Team C-Grade Blacklist (incapable browsers, call drivers) X-Grade Everyone else
  • 35. Maintain High Quality
  • 36. High Quality Validation Build time tests (automated) static code analysis CSS validation JSP compile Constant developer vigilance Sometimes constraints are good
  • 37. Constraints Custom tags for some HTML elements anchors, images, form elements Only allow subset of attributes no: onclick, id required: various content Able to enforce all inputs have labels Free CSS and JS support Free shared functionality
  • 38. Debug Tools Logging Runtime in-application debugging Expose data to testers Debug various types of modules Content Error message placement
  • 39. File Structure Developer first Build for deploy later move files around combine them reformat them strip comments
  • 40. CSS Files Split between multiple files Typography Color Layout Modules Nav Each declaration on its own line
  • 41. Promote Re-Use (DRY)
  • 42. Composite View Separates “layout” of page from content Allows to plug in different modules into page Used in Apache Tiles Leverage in-house framework Try and gain as much re-use of JSP code
  • 43. Layout Header Rail Body Footer
  • 44. Module
  • 45. Page Definition header.jsp --> Header results.jsp --> Body sortbar.jsp --> Rail footer.jsp --> Footer
  • 46. Page Composition B/E Page Browser Def Magic
  • 47. DRY Avoid targeting IDs for CSS or JS Custom attribute for JavaScript Data Separation of Layers Helper code for small “controls” with the CSS to go with them Take advantage of lazy developers
  • 48. Consistent Experience
  • 49. Consistent Experience Make learning how to use the site easier for users. Reduce the number of patterns. Stick with the ones that work best. Meet users expectations on... messaging error placements interfaces
  • 50. Consistent Experience Review the site for common patterns Introduce a Pattern Library Build common “controls”
  • 51. Follow the 80/20 Rule
  • 52. “Simple things should be simple and complex things should be possible.” —Alan Kay
  • 53. 80/20 Rule Make it easy to do the the common task for 80% of your users Make it possible to do everything for the other 20% that need to
  • 54. Hide/Reveal
  • 55. Micro-content
  • 56. 80/20 Rule Patterns: Hide Reveal Tabs Pattern Pulling in content via Ajax “Micro-content” bubbles
  • 57. What’s Next?
  • 58. Questions? Slides: Email: Blog: Orbitz Jobs: