Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Coding the UI: Lessons Learned from Orbitz and ...
Search
Mark Meeker
October 08, 2008
Technology
0
56
Coding the UI: Lessons Learned from Orbitz and ebookers
AjaxWorld - October, 2008
Mark Meeker
October 08, 2008
Tweet
Share
More Decks by Mark Meeker
See All by Mark Meeker
Building a Mobile Device Lab
meeker
0
140
Building a Live Style Guide
meeker
1
80
Front-End Operations
meeker
2
130
Simplifying Massive Changes with a Live Style Guide
meeker
0
64
Modern Browser Support
meeker
0
78
Strategies for Accessibility
meeker
0
50
Real World Web Development
meeker
0
160
Open & Acccessible
meeker
0
90
Merging Ajax and Accessibility
meeker
0
46
Other Decks in Technology
See All in Technology
Startups on Rails: 2026 at RubyConf Thailand
irinanazarova
0
120
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
170
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
製造業ドメインにおける LLMプロダクト構築: 複雑な文脈へのアプローチ
caddi_eng
1
460
Claude Codeの進化と各機能の活かし方
oikon48
12
4.6k
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
72k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
22k
Databricksアシスタントが自分で考えて動く時代に! エージェントモード体験もくもく会
taka_aki
0
330
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
どこで打鍵するのが良い? IaCの実行基盤選定について
nrinetcom
PRO
2
170
us-east-1 に障害が起きた時に、 ap-northeast-1 にどんな影響があるか 説明できるようになろう!
miu_crescent
PRO
3
1.1k
Windows ネットワークを再確認する
murachiakira
PRO
0
280
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
515
110k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
68
Abbi's Birthday
coloredviolet
2
5.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
230
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
GraphQLとの向き合い方2022年版
quramy
50
14k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Git: the NoSQL Database
bkeepers
PRO
432
66k
Transcript
AJAX*World* October,'2008 Mark*Meeker* CODING THE UI: LEARNED FROM ORBITZ &
EBOOKERS LESSONS
None
Dozens of apps, hundreds of VMs, thousands of services. UI
webapp (controller layer) JSP (page templating) JavaScript JSP 2.0 XHTML
1.0 CSS CSS 2.1
“As far as the customer is concerned, the interface is
the product.” - Jef Raskin
“Browsers are the most hostile software development environments possible.” -
Douglas Crockford
1,971 Revisions to 1 .css file since Oct. 2006 2.9
edits per day (if working weekends)
2007 - updates.orbitz.com 2008 - ebookers.com 2005 - CheapTickets.com 2006
- mobile.orbitz.com 2001 - Orbitz.com 2002 - OrbitzForBusiness.com
None
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 Experience
“Good judgement is the result of experience … Experience is
the result of bad judgement.” —Fred Brooks
Fresh start? http://flickr.com/photos/jeremybrooks/833157523/
Wishlist Internationalization Universality Maintain High Quality Code Promote Code Re-Use
Consistent Experience http://flickr.com/photos/litandmore/2664900676/
Internationalization http://www.flickr.com/photos/nickjacksonza/256651959/
6:50pm versus 18:50
14/11/07 versus 11/14/07
miles versus kilometers
3,000+ Labels, strings, paragraphs of text.
Traveler vs. Traveller vs. Passengers
1,500+ Images
Images Remove text as much as possible Consider cultural differences
in images choices
English
French
Japanese
Translation Small words can expand 200-300% Rule of thumb: 40%
Watch for wrapping issues (or lack thereof) Consider during design comp stage
Universality
None
Follow Web Standards
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
IE6 Support <!--[if IE 6]> <style type="text/css" media="all"> @import url(/style/layout/layoutIE6Fix.css);
</style> <![endif]-->
Firefox 3, OSX
IE 5.2, OSX
None
None
Amazon Kindle
Progressive Enhancement Content is KING! Start with semantic markup Get
working functionality with HTML only Enhance display with CSS Enhance behavior with JavaScript
Separation of Layers No in-line styles or in-line JavaScript If
it only works with JavaScript, create it with JavaScript
Graded Browser Support http://developer.yahoo.com/yui/articles/gbs/ Varying levels of support Isn’t required
to be identical Not all or nothing
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
Maintain High Quality http://www.flickr.com/photos/harvypascua/46114061
High Quality Validation Build time tests (automated) static code analysis
CSS validation JSP compile Constant developer vigilance Sometimes constraints are good
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
None
None
Debug Tools Logging Runtime in-application debugging Expose data to testers
Debug various types of modules Content Error message placement
File Structure Developer first Build for deploy later move files
around combine them reformat them strip comments
CSS Files Split between multiple files Typography Color Layout Modules
Nav Each declaration on its own line
Promote Re-Use (DRY) http://flickr.com/photos/kingdesmond/477389196
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
Layout Header Footer Rail Body
Module
None
Page Definition header.jsp --> Header results.jsp --> Body sortbar.jsp -->
Rail footer.jsp --> Footer
Page Composition Page Def B/E Magic Browser
None
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
Consistent Experience http://www.flickr.com/photos/kiad/491754035/
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
None
None
None
None
Consistent Experience Review the site for common patterns Introduce a
Pattern Library Build common “controls”
Follow the 80/20 Rule
“Simple things should be simple and complex things should be
possible.” —Alan Kay
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
None
Hide/Reveal
Micro-content
80/20 Rule Patterns: Hide Reveal Tabs Pattern Pulling in content
via Ajax “Micro-content” bubbles
What’s Next? http://flickr.com/photos/reinvented/179863733/
Slides: http://markmeeker.com/events/ajaxworld2008 Email:
[email protected]
Blog: http://markmeeker.com Orbitz Jobs: http://www.orbitz.com/startmycareer Questions?