Professional Frontend Engineering
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Professional Frontend Engineering

on

  • 40,790 views

Here are the slides from my talk at @media in London two weeks ago titled "Professional Frontend Engineering." I had four goals for the talk....

Here are the slides from my talk at @media in London two weeks ago titled "Professional Frontend Engineering." I had four goals for the talk.

Put a stake in the ground.
Reiterate our values.
Advocate the discipline.
Nurture a healthy Web.

The goals were threaded throughout the four sections of the talk::

Historical Perspective
Our Beliefs & Principles
Knowledge Areas & Best Practices
Why It All Matters

The professionalization of frontend engineering is a topic I'm passionate about. I think it is critical to the advancement of the Internet.

Presented May 30th, 2008, in London at the @media conference in the plenary opening day two.

Statistics

Views

Total Views
40,790
Views on SlideShare
35,556
Embed Views
5,234

Actions

Likes
118
Downloads
1,258
Comments
2

81 Embeds 5,234

http://nate.koechley.com 4069
http://cssah.blogspot.com 303
http://developer.yahoo.net 103
http://www.cnblogs.com 75
http://www.keelii.com 61
http://www.keelii.cn 52
http://www.slideshare.net 47
http://www.scoop.it 35
http://rainman.cnblogs.com 31
http://danielwang130.blogspot.com 29
https://twitter.com 29
http://know.namics.com 28
http://www.linkedin.com 27
http://yuanyun.blogbus.com 25
http://developer.yahoo.com 24
http://cssah.blogspot.in 23
http://cssah.blogspot.co.uk 21
https://know.namics.com 20
http://dismory.cn 20
http://bypace.com 19
https://si0.twimg.com 17
http://yslove.net 17
http://lifeplayer.tistory.com 14
http://cssah.blogspot.ca 14
http://blog.int.unic.com 10
http://cssah.blogspot.nl 8
http://www.epstage.com 7
http://cssah.blogspot.com.au 6
http://hgallc.intra.net 6
http://translate.googleusercontent.com 4
http://cssah.blogspot.de 4
http://chunghe.blogspot.com 4
http://cssah.blogspot.com.es 4
http://cssah.blogspot.ro 3
http://lms.elearning.edu.sa 3
http://www.diandian.com 3
http://danielwang130.blogspot.ca 3
http://dismory.com 3
http://wildfire.gigya.com 3
http://feeds2.feedburner.com 3
http://cssah.blogspot.fr 3
http://danielwang130.blogspot.hk 2
http://chunghe.blogspot.tw 2
https://staging-assets.local.twitter.com 2
http://www.filescon.com 2
http://cps-lpc.smartsite.tamtam.nl 2
http://cssah.blogspot.ie 2
http://cssah.blogspot.kr 2
http://cssah.blogspot.com.br 2
http://webcache.googleusercontent.com 2
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Professional Frontend Engineering Presentation Transcript

  • 1. Professional Frontend Engineering Nate Koechley Senior Frontend Engineer Yahoo! natek@yahoo-inc.com | developer.yahoo.com/yui nate.koechley.com/blog | “natekoechley”
  • 2. Why this topic?
  • 3. • Put a stake in the ground. • Reiterate our values. • Advocate the discipline. • Nurture a healthy Web.
  • 4. Historical Perspective
  • 5. Historical Our Beliefs Perspective & Principles
  • 6. Historical Our Beliefs Perspective & Principles Knowledge Areas & Best Practices
  • 7. Historical Our Beliefs Perspective & Principles Knowledge Why It All Areas & Best Matters Practices
  • 8. Historical Perspective
  • 9. Year = 2001
  • 10. Age = 7 years
  • 11. Employees = 3000
  • 12. Frontend Engineers = 0
  • 13. So?
  • 14. 2001 First frontend engineering specialists hired.
  • 15. 2008 ~700 professional frontend engineers spread across Y! offices worldwide. And hiring!!!
  • 16. 2001 Font tags & nested tables. Static interface.
  • 17. 2008 Semantic & accessible markup. Rich DHTML & Ajax behavior. More content. Same fast speed.
  • 18. 2001 Available and accessible to everyone.
  • 19. 2008 Available and accessible to everyone.
  • 20. 2001 Plain but predictable.
  • 21. 2008 Highly visual and adaptive, but still dependable.
  • 22. 2001 Modest user expectations.
  • 23. 2008 Sophisticated, broad, and non-trivial user expectations.
  • 24. 2001 Intersection of design and development still vague.
  • 25. Now Professional Frontend Engineers focused at the intersection of design and development is a best practice.
  • 26. —Irene Au, SVP of UED at Yahoo!
  • 27. “In 2001, with developments in advanced JavaScript and DHTML, we knew the web experience would evolve beyond the static pages we were producing. We brought in web developers to help us pioneer Yahoo’s offerings to include a more dynamic, interactive experience for our users.” —Irene Au, SVP of UED at Yahoo!
  • 28. —Irene Au, SVP of UED at Yahoo!
  • 29. “... Another motivation was to bring in a disciplined frontend programming practice to Yahoo. Before then, the presentation, behavior, and structure of our pages were not separate, which led to many challenges and inefficiencies in designing and developing our products.” —Irene Au, SVP of UED at Yahoo!
  • 30. “The Framers of the Web saw browser differences as beneficial and believed that visitors should choose how their browser displays the page...”
  • 31. “...I wanted more control so I threw my HTML book in the trash and started from scratch.”
  • 32. The Web is still sick.
  • 33. Frontend Engineers are the Web’s Radiologists
  • 34. Question: What is Frontend Engineering?
  • 35. Answer: We write software in JavaScript, CSS, and HTML & more...
  • 36. Answer: We tell browsers what to do.
  • 37. Answer: We’re responsible for “view source”
  • 38. The Yahoo! Stack Pages & modules 95% HTML, 5% PHP Display logic & APIs 50% HTML, 50% PHP Specific PHP biz logic 90% PHP, 10% Text Generic PHP functions & libs 100% PHP C/C++ Libraries. 90% C/C++, 10% PHP
  • 39. The Yahoo! Stack Pages & modules Frontend 95% HTML, 5% PHP Display logic & APIs 50% HTML, 50% PHP Specific PHP biz logic 90% PHP, 10% Text Generic PHP functions & libs 100% PHP Backend C/C++ Libraries. 90% C/C++, 10% PHP
  • 40. The Yahoo! Stack Pages & modules Frontend 95% HTML, 5% PHP Display logic & APIs 50% HTML, 50% PHP Specific PHP biz logic 90% PHP, 10% Text Generic PHP functions & libs 100% PHP Backend C/C++ Libraries. 90% C/C++, 10% PHP
  • 41. SIMPLE?
  • 42. no.
  • 43. server
  • 44. (X)HTML server
  • 45. (X)HTML Specification server
  • 46. (X)HTML Specification Implementation server
  • 47. (X)HTML Specification Implementation Bugs server
  • 48. (X)HTML Specification Implementation Bugs [ Theory / Practice ] server
  • 49. CSS BOM API (X)HTML DOM JavaScript DOM API Specification Data Transport data: custom, xml, mixed: new xhtml Implementation json behavior: js Bugs [ Theory / Practice ] server
  • 50. Safari Firefox Opera IE5, 6, 7 Firefox Opera 10,000+ UAs Macintosh Windows Linux, Unix, Mobile CSS BOM API (X)HTML DOM JavaScript DOM API Specification Data Transport data: custom, xml, mixed: new xhtml Implementation json behavior: js Bugs [ Theory / Practice ] server
  • 51. Safari Firefox Opera IE5, 6, 7 Firefox Opera 10,000+ UAs Macintosh Windows Linux, Unix, Mobile CSS BOM API (X)HTML DOM JavaScript DOM API Specification data: custom, xml, mixed: new xhtml, Data Transport Implementation behavior: js json Defects [ Theory / Practice ] server
  • 52. Safari Firefox Opera IE5, 6, 7 Firefox Opera 10,000+ UAs Macintosh Windows Linux, Unix, Mobile knowledge areas: 7 CSS (X)HTML dimensions: xJavaScript DOM 4 BOM API DOM API platforms: x 3 Specification data: custom, xml, mixed: new xhtml, browsers perDefects platform: x 4 Data Transport Implementation behavior: js json rendering modes: x 2 [ Theory / Practice ] server =672
  • 53. usability, internationalization, localization, visual design, accessibility, information architecture, security, build processes, performance, benchmarking, devices, portability
  • 54. from Lifted ©2007 Pixar Animation Studios
  • 55. Different from Backend because we: • Can’t compile. • Can’t trust. • Can’t predict. • Can’t install or store. • Can’t hide anything!
  • 56. Douglas Crockford on browsers: “The most hostile software development environment imaginable.”
  • 57. If your business is online... your value depends on Frontend Engineering.
  • 58. Elegant algorithms benefit users through interfaces built by Frontend Engineers.
  • 59. Every gorgeous design is brought to life by Frontend Engineers.
  • 60. Frontend engineers give sites strength & resilience, appearance & form, and functionality & interactivity.
  • 61. ...which is why professional frontend engineering is critical for success.
  • 62. Historical Our Beliefs Perspective & Principles
  • 63. Four Guiding Principles
  • 64. 1) Availability
  • 65. Availability: Maximize availability, accessibility and utility of content and services for all users worldwide.
  • 66. 2) Openness
  • 67. Openness: Share. Learn. Support. Advocate. We benefit from a healthy Internet.
  • 68. 3) Richness
  • 69. Richness: Provide, but not too much. Layer endlessly. Remember we are not average.
  • 70. 4) Stability
  • 71. Stability: The Web is young. Invest in quality. Prepare for the future.
  • 72. Four Guiding Principles • Availability • Openness • Richness • Stability
  • 73. Three Core Techniques
  • 74. 1) Graded Browser Support http://developer.yahoo.com/yui/articles/gbs/
  • 75. “Support” does not mean identical.
  • 76. “Support” is not a binary choice.
  • 77. Three Support Grades
  • 78. Three Support Grades C-Grade • Blacklist (of incapable browsers) • Withhold CSS & JavaScript
  • 79. Three Support Grades C-Grade • Blacklist (of incapable browsers) • Withhold CSS & JavaScript A-Grade • Whitelist (of capable browsers tested) • Serve CSS & JavaScript
  • 80. Three Support Grades C-Grade • Blacklist (of incapable browsers) • Withhold CSS & JavaScript A-Grade • Whitelist (of capable browsers tested) • Serve CSS & JavaScript X-Grade • Everybody else. • Serve CSS & JavaScript
  • 81. A-Grade Support http://developer.yahoo.com/yui/articles/gbs
  • 82. C-Grade Experience
  • 83. A-Grade Experience
  • 84. C-Grade Experience
  • 85. A-Grade Experience
  • 86. 2) Progressive Enhancement
  • 87. Rules of Progressive Enhancement
  • 88. Rules of Progressive Enhancement • Enrich content with thorough, explicit markup.
  • 89. Rules of Progressive Enhancement • Enrich content with thorough, explicit markup. • Test core functionality with HTML only.
  • 90. Rules of Progressive Enhancement • Enrich content with thorough, explicit markup. • Test core functionality with HTML only. • Enhance layout via externally linked CSS.
  • 91. Rules of Progressive Enhancement • Enrich content with thorough, explicit markup. • Test core functionality with HTML only. • Enhance layout via externally linked CSS. • Enhance behavior via externally linked unobtrusive JavaScript.
  • 92. Rules of Progressive Enhancement • Enrich content with thorough, explicit markup. • Test core functionality with HTML only. • Enhance layout via externally linked CSS. • Enhance behavior via externally linked unobtrusive JavaScript. • Respect end-user browser preferences.
  • 93. Flipped definition of “graceful degradation”
  • 94. 3) Unobtrusive JavaScript http://onlinetools.org/articles/unobtrusivejavascript/
  • 95. Rules of Unobtrusive JavaScript
  • 96. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents.
  • 97. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents. • Don’t depend on or trust JavaScript.
  • 98. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents. • Don’t depend on or trust JavaScript. • Poke objects before using them.
  • 99. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents. • Don’t depend on or trust JavaScript. • Poke objects before using them. • Write JavaScript, not dialects.
  • 100. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents. • Don’t depend on or trust JavaScript. • Poke objects before using them. • Write JavaScript, not dialects. • Mind your manners with vars & scope.
  • 101. Rules of Unobtrusive JavaScript • No JavaScript in HTML documents. • Don’t depend on or trust JavaScript. • Poke objects before using them. • Write JavaScript, not dialects. • Mind your manners with vars & scope. • Support multiple event triggers.
  • 102. Don’t Break the Web! href=“#” href=“javascript:foo()” onclick=“foo()”
  • 103. Three Core Techniques • Graded Browser Support • Progressive Enhancement • Unobtrusive JavaScript
  • 104. Making Decisions
  • 105. Making Decisions (1) 1. Do what is standard. if impossible, then: 2. Do what is common. if impossible, then: 3. Do what it takes.
  • 106. Making Decisions (2) 1. Do what is simple. ✚ 2. Do what is flexible & progressive. ✚ 3. Do what is open.
  • 107. Making Decisions (3) • Remember you have multiples audiences to satisfy: • Users • Developers • Machines
  • 108. Historical Our Beliefs Perspective & Principles Knowledge Areas & Best Practices
  • 109. 8 Areas of Focus 1. HTML 6. Performance 2. CSS 7. Infrastructure & Process 3. JavaScript 8. Tooling 4. Accessibility 5. Internationalization
  • 110. oc us F #1 HTML
  • 111. Focus: Be thorough.
  • 112. <label>
  • 113. <fieldset>
  • 114. <cite>
  • 115. <caption>
  • 116. <thead>
  • 117. <th scope=”row” abbr=”ManU”>
  • 118. <ins datetime=”2008-05-30”>
  • 119. Aim for permanence.
  • 120. Switching costs are rising.
  • 121. oc us F #2 CSS
  • 122. Focus on the left side.
  • 123. selector: declaration;
  • 124. selector: declaration;
  • 125. Focus: Specificity great selectors are an expression of professionalism
  • 126. h1: declaration;
  • 127. #mod h1: declaration;
  • 128. div#mod h1: declaration;
  • 129. body.cart #mod h1.class a: declaration;
  • 130. #mod ul li li: declaration;
  • 131. Focus: Maintenance think about how sites age
  • 132. oc us F #3 JavaScript
  • 133. JavaScript • Quality • Security
  • 134. 1) Quality
  • 135. Linting • Use programs like JSLint (jslint.org) to confirm the quality of your code. • Adopt the idioms it promotes to improve your code quality.
  • 136. Unit Testing w/ YUI Test • Rapid creation of test cases via simple syntax. • Advanced failure detection for methods that throw errors. • Grouping of related test cases using test suites. • Asynchronous tests for testing events and Ajax communication. • DOM Event simulation in all A-grade browsers.
  • 137. Profiling • Learn where to improve your code. • Programmatically retrieve profiling information as the application is running. • Determine unit-testing success based on profiling results.
  • 138. JavaScript Pollution • Do not mutate JavaScript itself. • Do protect yourself from browsers. • Minimize touchpoints between authors and vendors so vendors can iterate faster.
  • 139. 2) Security
  • 140. JavaScript Security • Beware of XSS • Never Trust Data from the Client • Monitor AdSafe/Caja Developments
  • 141. oc us F #4 Accessibility
  • 142. ARIA
  • 143. Decoupled Events
  • 144. oc us F #5 Internationalization
  • 145. Begin serving all .css and .js at UTF-8
  • 146. @charset quot;
  • 147. oc us F #6 Performance
  • 148. 14 then. 8 more today.
  • 149. <link> not @import • Because @import overrides the browsers’ native performance sequencing.
  • 150. Avoid Redirects • 3xx status codes – mostly 301 and 302 HTTP/1.1 301 Moved Permanently Location: http://yahoo.com/newuri • Cache redirects via Expires headers • Redirects are worst form of blocking
  • 151. Use Cookie-Free Domains For Assets. • Serving static cacheable assets from a distinct domains keeps cookies from riding along with all requests. yimg.com images-amazon.com fbcdn.net
  • 152. Preload Assets
  • 153. Preload Assets 1. Unconditional preload - always w/ onload Example: google.com’s sprite
  • 154. Preload Assets 1. Unconditional preload - always w/ onload Example: google.com’s sprite 2. Conditional preload - based on user action Ex: search.yahoo.com’s Search Assist
  • 155. Preload Assets 1. Unconditional preload - always w/ onload Example: google.com’s sprite 2. Conditional preload - based on user action Ex: search.yahoo.com’s Search Assist 3. Anticipated preload - give redesigns a boost
  • 156. Optimize CSS Sprites
  • 157. Optimize CSS Sprites 1. Horizontal alignment is usually smaller than vertical.
  • 158. Optimize CSS Sprites 1. Horizontal alignment is usually smaller than vertical. 2. Combine similar colors in a sprite to minimize color count. Only 256 colors can fit in a PNG8.
  • 159. Optimize CSS Sprites 1. Horizontal alignment is usually smaller than vertical. 2. Combine similar colors in a sprite to minimize color count. Only 256 colors can fit in a PNG8. 3. Avoid unnecessarily large gaps between parts of the sprite.
  • 160. GET for Ajax Requests • POST is a two-step process. • GET can send in one packet. • Use if possible, but max payload is 2K in IE.
  • 161. Keep Focusing on Events 1. Event Delegation to reduce total number 2. Don’t always wait for onLoad • YUI Event has onAvailable, onContentReady, & onDomReady
  • 162. iPhone Tip • iPhone will not cache assets larger than 25K • That’s 25K uncompressed. • Only 19 total items in cache. • http://yuiblog.com/blog/2008/02/06/iphone- cacheability/
  • 163. oc us F #7 Infrastructure & Process
  • 164. Build Process
  • 165. Documentation
  • 166. three versions of each member
  • 167. *.js
  • 168. *-debug.js
  • 169. *-min.js
  • 170. What Is YUI?
  • 171. oc us F #8 Tooling
  • 172. Need More Progress.
  • 173. But there’s been some: • JSLint, JScript Debugger, Firebug, Debug Bar, Fiddler, Charles, HTTP Live Headers, DragonFly, Visual Studio 2008 • YUI Logger, YUI Test, and YUI Profiler
  • 174. Historical Our Beliefs Perspective & Principles Knowledge Why It All Areas & Best Matters Practices
  • 175. There’s a lot of work to be done.
  • 176. We need more people doing it.
  • 177. The health of the internet depends on it.
  • 178. The health of our businesses and passions depends on it.
  • 179. We must stay vigilant.
  • 180. We must defend users.
  • 181. Go forth with this in mind:
  • 182. Be Tireless Trendsetters of Quality Be active. Find the way forward. Educate.
  • 183. Be Belligerent Gatekeepers of Quality Do not accept less. Do not cut corners.
  • 184. Exhibit Stubborn Empathy for Users We’re the last line of defense!
  • 185. Let’s keep talking... nate@koechley.com http://nate.koechley.com/blog “natekoechley”
  • 186. CC Images Used • http://www.flickr.com/photos/dideo/407360526/sizes/l/ • http://www.flickr.com/photos/jenniferbuehrer/113554568/sizes/l/ • http://www.flickr.com/photos/peteashton/290691658/sizes/l/ • http://www.flickr.com/photos/pedjap/101230548/sizes/o/ • http://www.flickr.com/photos/songtuyuri/2200100451/sizes/o/ • http://www.flickr.com/photos/dominik99/1403329318/sizes/o/ • http://www.flickr.com/photos/cuellar/482993472/sizes/o/
  • 187. nate@koechley.com http://nate.koechley.com/blog natekoechley = twitter, delicious, flickr, tripit, last.fm, linkedin, fireeagle, friendfeed, ... everywhere.