<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Graham King &#187; Future of Web Apps</title>
	<atom:link href="http://www.darkcoding.net/category/future-of-web-apps/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.darkcoding.net</link>
	<description>Solvitas perambulum</description>
	<lastBuildDate>Fri, 30 Jul 2010 19:57:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kathy Sierra: Give your users super-powers</title>
		<link>http://www.darkcoding.net/future-of-web-apps/kathy-sierra-give-your-users-super-powers/</link>
		<comments>http://www.darkcoding.net/future-of-web-apps/kathy-sierra-give-your-users-super-powers/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 06:15:21 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[kathy sierra]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/?p=801</guid>
		<description><![CDATA[Kathy Sierra at the Business Of Software conference last autumn. Hour long talk, really worth watching (as the length of my notes will vouch).

Abstract: It&#8217;s not about you, not about your product, it&#8217;s about how awesome you make your users. If you sell digital cameras, make your users better photographers, through a better camera yes, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Kathy_Sierra">Kathy Sierra</a> at the <a href="http://businessofsoftware.blip.tv/">Business Of Software</a> conference last autumn. Hour long talk, really worth watching (as the length of my notes will vouch).</p>

<p><strong>Abstract:</strong> It&#8217;s not about you, not about your product, it&#8217;s about how awesome you make your users. <strong>If you sell digital cameras, make your users better photographers</strong>, through a better camera yes, but also teach them about exposure, light, etc.</p>

<p><embed src="http://blip.tv/play/hatvgc21fQI" type="application/x-shockwave-flash" width="480" height="350" allowscriptaccess="always" allowfullscreen="true"></embed><br />
<small>(If the embed is broken, see <a href="http://www.blip.tv/file/3346148">Kathy Sierra at Business of Software</a>)</small></p>

<p>Here are my notes:</p>

<h2>Make the user awesome.</h2>

<p>You want them to talk about the amazing thing they did (with your tool).</p>

<p><span id="more-801"></span></p>

<p>Your product is part of a higher purpose (digital cameras -> photography). Don&#8217;t talk about your product, instead blog / tweet / evangelize the higher purpose.</p>

<p>Make the user better. Teach.</p>

<p>Sense of belonging. Do people want to wear T-shirts with your logo? What does being your user SAY about your user? It shouldn&#8217;t say something bad, and it shouldn&#8217;t say nothing.</p>

<h2>Get them interested</h2>

<p>Trigger an emotional reaction (faces, sex, cute, fear, story) so people pay attention.</p>

<p>Talk in conversations, not formal language. Stories trump data.</p>

<p>Contrast your marketing material, with your user manual. Take care of people <em>after</em> they buy, so they stay excited.</p>

<h2>Give super-powers</h2>

<p>Instead of Word Of Mouth, which requires people <em>telling</em> other people, use Word Of Obvious, where they show other people what they did, or other people see it, it&#8217;s obvious that person is awesome now that they use your product.</p>

<p>Flip business advice: </p>

<ul>
<li>Exceptional customer service -> exceptional customers. </li>
<li>&#8216;From good to great&#8217; -> great customers.</li>
</ul>

<p>Make your customers into the perfect customers you wish you had.</p>

<p>What super-powers do you give your customers? Help them get really really good at something.</p>

<p><strong>Don&#8217;t build a better [x], build a better [user of x]</strong>.
Say: <em>We help [type of person] get better at [thing]</em>.</p>

<p>Wrong: What problem do you solve? What value to you add?<br />
Right: What does having the solution mean to our users? What bigger, cooler thing is enabled?</p>

<p>Make it a rule that with your product, <strong>the user must do something cool within [x] minutes</strong>. Make a document listing 10 awesome things they can do, quickly, with your product, and how.</p>

<p>Help users justify acquiring your product to others. They are already sold, help them sell others.</p>

<h2>Make good things easy / natural / obvious</h2>

<p>Motivate / Inspire users. Motivate users to do things they wish they already did.</p>

<p>Peter Bregman, harvard business.org, on <a href="http://blogs.hbr.org/bregman/2009/03/the-easiest-way-to.html">the easiest way to change behavior</a>: </p>

<p>Right things should be easiest, most natural. Make doing the wrong thing very difficult. Usability matters.</p>

<h2>Help your users practice</h2>

<p>Make your users smarter. Shrink the 10,000 hours they need to become experts. Give users patterns they can learn. Experts are better at identifying patterns in the problem domain (the thing you are making your users super-heros at). Make their practice fun.</p>

<p>After 1 or 2 years, experience is a poor predictor of performance / expertise. Was it 10 years, or 1 year repeated 10 times?</p>

<p>Offer exercises, games, contests, tutorials that support deliberate practice of the right things. The things that make people awesome.</p>

<p>Those exercises etc should use cognitive pleasures to keep users interested and practicing. Game designers have identified a bunch: </p>

<ul>
<li>Thrill</li>
<li>Discovery</li>
<li>Challenge</li>
<li>Self-expression</li>
<li>Social</li>
<li>Novelty</li>
<li>Sensory.  </li>
</ul>

<p>The more <a href="http://projects.ict.usc.edu/itw/gel/EricssonDeliberatePracticePR93.pdf">deliberate practice</a> [pdf] your users get, the better they get, so the more they enjoy using your product. And the more chance other people have of seeing them practice, so more Word Of Obvious.</p>

<h2>Talk with users at their angriest</h2>

<p>Add a &#8220;WTF?&#8221; button. </p>

<p>Help / FAQ are usually written for people who are intellectually curious, wanting to learn more. The &#8220;WTF?&#8221; button is for angry upset people who hate your product right now. Different feeling, different audience.</p>

<p>How you make users feel about themselves, drives how they feel about YOU.</p>

<p>If you want them to RTFM, make a better FM.</p>

<p>Where do you fit on their <a href="http://www.mcli.dist.maricopa.edu/smc/journey/ref/summary.html">Hero&#8217;s Journey</a> (also <a href="http://www.thewritersjourney.com/hero's_journey.htm">here</a> and <a href="http://en.wikipedia.org/wiki/Monomyth">full detail here</a>). What part do you play? Are you the helpful sidekick? The ogre guarding the bridge? Something else?</p>

<h2>Community management</h2>

<p>Model good behavior in your community. </p>

<p>Make a short document for moderators / active users telling them how to answer &#8216;dumb questions&#8217;, in a nice way. Provide alternative answers to guide them away from RTFM or &#8220;just google it&#8221;.</p>

<p>Encourage a culture of &#8220;there are no dumb answers&#8221;. Newbies are often the best people to answer other newbie&#8217;s questions, yet on most forums people don&#8217;t feel ready to answer until they are experts. Encourage early participation.</p>

<p>Don&#8217;t force inclusivity, don&#8217;t force your expert users to hang out and nurture the newbies. Hanging out with other experts is a lot more interesting. Give them a special space, where they can use jargon. <a href="http://www.djangoproject.com/">Django</a>, like many projects, has two mailing lists: django-users (beginners, normal folk), and django-developers (experts).</p>

<p>Evolution of awesome: </p>

<ol>
<li>Awesome product (features)</li>
<li>Awesome people talking about the product (expert / influencer testimonials)</li>
<li>User testimonials (&#8221;I love this company&#8221;)</li>
<li>User benefits (&#8221;Look at what I did&#8221;)</li>
<li><a href="http://www.youtube.com/watch?v=EmEPXXJ4sKw">I know Kung-Fu</a></li>
</ol>

<h2>Summary</h2>

<p>In the words of <a href="http://www.jwz.org/doc/groupware.html">Jamie Zawinski</a>:</p>

<blockquote>
  <p>So I said, narrow the focus. Your &#8220;use case&#8221; should be, there&#8217;s a 22 year old college student living in the dorms. How will this software get him laid?</p>
</blockquote>

<p><strong>Your job is to make people better. Your tool is software.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/future-of-web-apps/kathy-sierra-give-your-users-super-powers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Speaking at Open Web Vancouver 2009 in June</title>
		<link>http://www.darkcoding.net/software/speaking-open-web-vancouver-2009/</link>
		<comments>http://www.darkcoding.net/software/speaking-open-web-vancouver-2009/#comments</comments>
		<pubDate>Sun, 17 May 2009 21:30:59 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[owv09 speaking vancouver]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/?p=455</guid>
		<description><![CDATA[I will be speaking at Open Web Vancouver on Thursday, June 11, 2009 and Friday, June 12, 2009.
That&#8217;s in Vancouver, B.C., Canada. There&#8217;s a very interesting speaker lineup, and the whole conference is reasonably priced, so come along, learn, interact, and enjoy Vancouver in the summertime.

My talk will be entitled How and Why to Extend [...]]]></description>
			<content:encoded><![CDATA[<p>I will be speaking at <a href="http://www.openwebvancouver.ca">Open Web Vancouver</a> on Thursday, June 11, 2009 and Friday, June 12, 2009.<br />
That&#8217;s in Vancouver, B.C., Canada. There&#8217;s a very interesting <a href="http://www.openwebvancouver.ca/speakers_sessions">speaker lineup</a>, and the whole conference is reasonably priced, so come along, learn, interact, and enjoy Vancouver in the summertime.</p>

<p>My talk will be entitled <strong>How and Why to Extend Firefox in Javascript (and Thunderbird, Komodo, and Songbird)</strong>. I will post the slides here in June.</p>

<p>See you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/speaking-open-web-vancouver-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Technologies for better web based applications: XMPP, Flex, and more</title>
		<link>http://www.darkcoding.net/software/technologies-for-better-web-based-applications-xmpp-flex-and-more/</link>
		<comments>http://www.darkcoding.net/software/technologies-for-better-web-based-applications-xmpp-flex-and-more/#comments</comments>
		<pubDate>Sun, 27 Jan 2008 20:39:52 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/software/technologies-for-better-web-based-applications-xmpp-flex-and-more/</guid>
		<description><![CDATA[The difference between a web site and an application is that an application is more dynamic, more responsive, to the user. A traditional web site is a set of pages you browse through, like an online catalog or brochure. A web application needs to be more interactive in two ways: By having a richer graphical [...]]]></description>
			<content:encoded><![CDATA[<p>The difference between a web site and an application is that an application is more dynamic, more responsive, to the user. A traditional web site is a set of pages you browse through, like an online catalog or brochure. A web application needs to be more interactive in two ways: By having a richer graphical interface, and by having real-time data. Here&#8217;s how.</p>

<p><span id="more-106"></span></p>

<h2>A richer graphical interface</h2>

<p>This is mostly done today by using <a href="http://en.wikipedia.org/wiki/JavaScript">Javascript</a>. This is a good approach to start with, but your Javascript can quickly get quite hairy, and there are certain things you simply can&#8217;t do, such as interactive graphs, flexible typography, or socket connections (which matters in the next section). If you do use Javascript, I recommend the <a href="http://developer.yahoo.com/yui/">Yahoo User Interface Library</a>.</p>

<p>For a richer environment that is easier to work with, and if you create a graphically rich web application in Javascript you will yearn for both, <a href="http://www.adobe.com/products/flex/">Flex</a> is the way to go. It is a free (as in beer, unfortunately not yet as in speech) SDK by Adobe that allows you to write graphically rich and responsive applications that run in the Flash player. Flex already has a lot of traction, see <a href="http://radar.oreilly.com/archives/2008/01/a_year_in_oreilly_books.html">O&#8217;Reilly books sales for 2007</a>. Bruce Eckel was <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=193593">so impressed with Flex</a> that he went to work for Adobe (as a consultant).</p>

<p>If you can accept targeting your application only at Firefox, for example for an in-house app, then an alternative is to build it as <a href="http://lifehacker.com/software/programming/how-to-build-a-firefox-extension-264490.php">a Firefox extension</a>. </p>

<h2>Real-time data</h2>

<p><a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a> has given us more responsive web applications, by allowing them to fetch data from a server programmatically. This is what gmail does to check if you have new e-mail. AJAX, or more correctly the browser XmlHttpRequest object, solves the problem of a client fetching data from the server., but it does not allow a server to tell a client that there is new data to fetch. Currently most servers will just check at regular intervals. There are currently two ways to allow the server to push data to the client.</p>

<p>You can trick the browser into keeping your HTTP connection connected, and receive data this way. There are <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">many very nasty ways of doing this, collectively known as Comet</a>.</p>

<p>Or, you can allow your web application to chat, using IM, with your server, or with anything else on the <a href="http://en.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol">XMPP</a> network. This is a fantastic way of making your app &#8216;connected&#8217;, receiving live data about anything you care to send it. Other people are saying this better than me, such as <a href="http://www.jivesoftware.com/community/blogs/jivetalks/2008/01/24/xmpp-aka-jabber-is-the-future-for-cloud-services">Matt Tucker here</a> &#8211; a less technical summary is <a href="http://www.readwriteweb.com/archives/xmpp_web.php">here</a>.</p>

<p>There is an XMPP library for Flex, called <a href="http://www.igniterealtime.org/projects/xiff/">XIFF</a>. I&#8217;ve blogged some documentation about <a href="http://www.darkcoding.net/software/xmpp-in-your-browser-flex-2-with-xiff/">using XIFF</a>.</p>

<h2>Applications that just happen to come from the web</h2>

<p>So, what can a desktop client do that a browser originated one can&#8217;t? </p>

<ul>
<li><p>Drag and drop from the OS, for example to upload a file, is still difficult. In Firefox the <a href="https://addons.mozilla.org/en-US/firefox/addon/2190">dragdropupload plugin</a> makes this easy. In IE there are some ActiveX&#8217;s. For a cross-browser solution you have to turn to Java, see here <a href="http://zgrossbart.blogspot.com/2007/11/drag-and-drop-file-uploading-made-easy.html">drag drop file uploading in Java</a>. I wish Flex / Flash did this.</p></li>
<li><p>Desktop integration, such as minimizing your application to the taskbar. If you need strong desktop integration, you could use <a href="http://labs.mozilla.com/2007/10/prism/">Mozilla&#8217;s Prism</a>, or write an <a href="http://labs.adobe.com/technologies/air/">Adobe AIR</a> application. In most cases launching your app from a button in the browser toolbar instead of from the OS menu doesn&#8217;t make a difference to the user.</p></li>
<li><p>Work offline. If a user is offline, they aren&#8217;t getting their e-mail, can&#8217;t get to their network shares. They will be quite unhappy. The fact they can&#8217;t access your application will likely be far down their upset list, so for most applications this doesn&#8217;t matter much. For those apps where it does matter, there is <a href="http://gears.google.com/">Google Gears</a> which is wrapped by the <a href="http://dojotoolkit.org/offline">Dojo offline toolkit</a>. <a href="http://developer.mozilla.org/en/docs/Online_and_offline_events">Firefox 3</a> also has offline support. </p></li>
</ul>

<h2>Let&#8217;s be sensible now</h2>

<p>I am not suggesting you build your whole application in Flex, or that HTTP be replaced by XMPP. That would be ridiculous. What I am saying is that if you <em>add</em> these to XHTML, CSS and Javascript, you get a much better web application, which allows an even greater proportion of the world&#8217;s software to be web based, with <a href="http://www.google.com/search?q=advantage+of+web+based+applications">all the advantages</a> that that entails.</p>

<p>Yesterday: cgi-bin/submit.pl. 
Tomorrow:  the world.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/technologies-for-better-web-based-applications-xmpp-flex-and-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shaun Inman &#8211; &#8220;10 reasons why you need to build an API&#8221;</title>
		<link>http://www.darkcoding.net/software/shaun-inman-mint-api/</link>
		<comments>http://www.darkcoding.net/software/shaun-inman-mint-api/#comments</comments>
		<pubDate>Sun, 12 Mar 2006 18:08:06 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/index.php/future-of-web-apps/shaun-inman-10-reasons-why-you-need-to-build-an-api/</guid>
		<description><![CDATA[Shaun Inman is the creator of Mint. He gave a presentation at the Future Of Web Apps (futureofwebapps) conference, held in London on Wednesday 8th February. It was a short presentation with little elaboration of the 10 reasons, followed by a lengthy Q&#038;A session.

An API takes a good thing and makes it better.
 API must [...]]]></description>
			<content:encoded><![CDATA[<p>Shaun Inman is the creator of <a href="http://www.haveamint.com/">Mint</a>. He gave a presentation at the Future Of Web Apps (futureofwebapps) conference, held in London on Wednesday 8th February. It was a short presentation with little elaboration of the 10 reasons, followed by a lengthy Q&#038;A session.</p>

<p>An API takes a good thing and makes it better.
 API must not change.</p>

<p>API allows external extension of your application. A plugin architecture allows internal extension.</p>

<p>The 10 reasons are:</p>

<ul>
<li>Increase brand awareness</li>
<li>Allow users to own their data</li>
<li>Build goodwill with developers</li>
<li>A perfect excuse for a community</li>
<li>Solving programming problems with an API in mind can improve code quality</li>
<li>Simplify internal reuse of data</li>
<li>Allow others to extend the functionality of your application</li>
<li>Alternate input mechanisms</li>
<li>Unanticipated applications of your data</li>
<li><p>Turn your program into a platform</p>

<p>The initial Mint release only supported Firefox and Safari (not IE), to cut down on the support calls by only having technical users.</p>

<p>See also <a href="http://flickr.com/photos/criminalintent/97298123">Larsz&#8217;s mind map</a>.</p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/shaun-inman-mint-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tom Coates &#8211; Native to a Web of Data</title>
		<link>http://www.darkcoding.net/software/tom-coates-native-to-a-web-of-data/</link>
		<comments>http://www.darkcoding.net/software/tom-coates-native-to-a-web-of-data/#comments</comments>
		<pubDate>Sat, 11 Mar 2006 18:45:43 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Society]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/index.php/uncategorized/tom-coates-native-to-a-web-of-data/</guid>
		<description><![CDATA[This is a write-up of my notes from Tom Coates&#8217; presentation at the Future Of Web Apps (futureofwebapps) conference, held in London on Wednesday 8th February.

Tom Coates used to work for the BBC, and has recently joined Yahoo. He has worked with Simon Willson. Tom had a highly polished presentation. Here are the notes:


We are [...]]]></description>
			<content:encoded><![CDATA[<p>This is a write-up of my notes from Tom Coates&#8217; presentation at the Future Of Web Apps (futureofwebapps) conference, held in London on Wednesday 8th February.</p>

<p><a href="http://www.plasticbag.org/">Tom Coates</a> used to work for the BBC, and has recently joined Yahoo. He has worked with <a href="http://simon.incutio.com/">Simon Willson</a>. Tom had a <a href="http://www.plasticbag.org/archives/2006/02/my_future_of_web_apps_slides/">highly polished presentation</a>. Here are the notes:</p>

<ul>
<li>We are moving from web pages connected by links to data connected by APIs.</li>
<li><p>The Web 2.0 design aesthetic can be summed up as: Rounded corners and gradient fills.</p></li>
<li><p>The future according to Tom: <strong>A web of data sources, services for exploring and manipulating data, and ways that users can connect them together.</strong></p></li>
<li><p>Mash-up: A network effect of services. <strong>Web as a platform</strong>. Hybridization of web services together makes both of them better.</p></li>
<li><strong>API</strong>s drive people to your site, allow people to enhance your site. You don&#8217;t have to do all the work yourself. People might start charging for the user of their APIs.</li>
<li><p>&#8220;What can I build that will make the whole web better ?&#8221; The Aggregate Web. <strong>It&#8217;s all about <em>data</em></strong> &#8211; owning, exploring, manipulating.</p></li>
<li><p>Build for normal users (the HTML interface), for developers (the API), and for machines (XML, predictable and consistent URLs and structure)</p></li>
<li>Start designing with data, not pages. <strong>Navigable, re-usable, explorable data</strong>.</li>
<li><strong>Identify core objects</strong> that people will refer to. For the BBC, that&#8217;s programs, films, events, people. Then make each core object addressable by URL.</li>
<li><strong>Good URLs</strong>: permanent, readable, and have a 1 to 1 correlation with concepts. Use directories to represent hierarchy. Predictable, guessable, hackable. Reflect structure of data. Only 1 URL for a piece of data. For example the BBC needs to have one and only one URL for a single program. That way all entries on the web will connect to that one URL, and will be connected themselves.</li>
<li><p><strong>Correlate with external identifier schemes</strong> (such as ISBN)in your URLs, or coin a standard if there isn&#8217;t one. If 100 people are blogging about a film, they need to be connected somehow &#8211; if they all link to the same BBC or IMDB page, they will be connected.</p></li>
<li><p>Build list views and batch manipulation interfaces. <strong>Types of page</strong>:</p>

<ul><li>Destination page (the entry of a film). Make XML versions of these.</li>
<li>List page (search results, lots of films). Make RSS versions of these.</li>
<li>Manipulation page (comment on a film). If needed, use AJAX / Flash here.</li></ul></li>
<li><p>Make sure your AJAX / Flash doesn&#8217;t break your URLs. Keep it in the page. Only manipulate the concept of that page.</p></li>
<li><strong>Use standard formats</strong> where possible. See <a href="http://microformats.org">microformats.org</a>.</li>
<li><p>Make your data as discoverable as possible.</p>

<p>That&#8217;s the end of my notes !
See also a <a href="http://flickr.com/photos/criminalintent/97298129/">good mind map of this talk</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/tom-coates-native-to-a-web-of-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cal Henderson &#8211; Building Flickr</title>
		<link>http://www.darkcoding.net/software/cal-henderson-building-flickr/</link>
		<comments>http://www.darkcoding.net/software/cal-henderson-building-flickr/#comments</comments>
		<pubDate>Sat, 18 Feb 2006 13:39:52 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/?p=69</guid>
		<description><![CDATA[These are the notes I took during Cal Henderson&#8217;s talk on Building Flickr at the Future of Web Applications conference in London on Wednesday 8th February.

Lars Ploughman posted a great mind map of the talk.

Collaboration


Try and figure out what people need; this is not always what they say they need.
Network effect: When people get their [...]]]></description>
			<content:encoded><![CDATA[<p>These are the notes I took during Cal Henderson&#8217;s talk on Building Flickr at the Future of Web Applications conference in London on Wednesday 8th February.</p>

<p>Lars Ploughman posted a <a href="http://flickr.com/photos/criminalintent/97298125/">great mind map</a> of the talk.</p>

<h2>Collaboration</h2>

<ul>
<li>Try and figure out what people need; this is not always what they say they need.</li>
<li>Network effect: When people get their friends to sign up, it makes their experience better.</li>
</ul>

<h2>Aggregation</h2>

<ul>
<li>Instead of always grouping data by user, we can slice it in other interesting ways:
<ul><li>Most recently uploaded</li>
<li>Most popular</li>
<li>By tag</li>
<li>By weighted &#8216;interestingness&#8217; algorithm</li></ul></li>
</ul>

<h2>Open APIs</h2>

<p>By API the Web 2.0 people mean a web service API: REST, SOAP, XML RPC, etc.
 You need an API to for your web client anyway, so clean it up and make it public.</p>

<p>The evolution is: web site -> web application -> web service</p>

<h2>Clean URLs</h2>

<p>Don&#8217;t expose internals or physical structure on the URL. They should reflect a consistent, logical structure, the way the user thinks about it. <em>mod_rewrite</em> enables this.
URLs should never change, otherwise you break links.</p>

<h2>AJAX</h2>

<p>It&#8217;s Asynchronous. It streamlines user interactions.</p>

<h2>Unicode</h2>

<p>Internationalisation and Localisation. Store, present and receive all textual data as UTF-8.</p>

<h2>Desktop / Platform integration</h2>

<p>Backed by the API. With an API for your app, you can write desktop apps. Some interactions on the web are difficult and/or slow (such as uploading lots of pictures). Desktop apps can have drag and drop for example.</p>

<p>It doesn&#8217;t have to be a full fledged desktop app &#8211; use Bookmarklets, Firefox plugins, etc.</p>

<p>Integrate with e-mail; every user has it and uses it daily. It&#8217;s often difficult to get data off mobile phones, but they can do e-mail, so provide an e-mail uploader. Send e-mail notifications.</p>

<h2>Mobile phones</h2>

<p>They mostly support XHTML-Mobile, a cut down version of XHTML. Build custom pages for mobiles because the screens are so small. Re-think what is on the page. Cut down as much as possible.</p>

<h2>Open data</h2>

<p>Allow users to import / export their data. Include the meta-data as well. This makes people feel safer about using your service.</p>

<h2>Open content</h2>

<p>When a user uploads something, they still own it. They still control the licensing.</p>

<p><a href="http://www.flickr.com">http://www.flickr.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/cal-henderson-building-flickr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joshua Schacter &#8211; del.icio.us &#8211; Things we&#8217;ve learned</title>
		<link>http://www.darkcoding.net/software/joshua-schacter-delicious-things-weve-learned/</link>
		<comments>http://www.darkcoding.net/software/joshua-schacter-delicious-things-weve-learned/#comments</comments>
		<pubDate>Sat, 18 Feb 2006 13:05:24 +0000</pubDate>
		<dc:creator>Graham King</dc:creator>
				<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://www.darkcoding.net/?p=68</guid>
		<description><![CDATA[These are the notes I took at Joshua Schachter&#8217;s talk at the Future Of Web Applications (futureofwebapps) conference, in London on Wednesday 8th February 2006.

Lars Ploughman posted a great mind map of the talk.


del.icio.us started as a text file of 25 000+ links on Joshua&#8217;s computer. Each one had a descriptive sentence, that got shortened [...]]]></description>
			<content:encoded><![CDATA[<p>These are the notes I took at Joshua Schachter&#8217;s talk at the Future Of Web Applications (futureofwebapps) conference, in London on Wednesday 8th February 2006.</p>

<p>Lars Ploughman posted a <a href="http://flickr.com/photos/criminalintent/97298683/">great mind map</a> of the talk.</p>

<ul>
<li><p>del.icio.us started as a text file of 25 000+ links on Joshua&#8217;s computer. Each one had a descriptive sentence, that got shortened down to a single word -> a tag. When building an application, it must solve a problem you have. You need passion.</p></li>
<li><p>Cross browser compatibility is difficult</p></li>
<li>Monitor your app.</li>
<li>Optimize: Add database indexes. Cache. Monitor user behaviour to find out what they do. This allows you to optimize certain parts &#8211; for example no-one ever goes to search results page 100. Figure out where latency is acceptable and use that; for example the RSS feed can be a few minutes behind the live site.</li>
<li>Aggregation of attention is interesting: What are people looking at, etc. Top 10.</li>
<li>Your application will be used in unexpected ways, so react to it. Monitoring helps.</li>
<li>Learn the ins and outs of Apache, including mod_rewrite.</li>
<li><p>Put a proxy in front of Apache &#8211; for example <a href="http://www.apsis.ch/pound/">pound</a> or <a href="http://www.danga.com/perlbal/">perbal</a>.</p></li>
<li><p>Build an API, and make sure it is easy to use. Avoid SOAP, CORBA, etc. Stick to simple XML. The API should allow uses to save their data offline, to script your application, etc.</p></li>
<li>Don&#8217;t expose internal ids, especially if they are consecutive. Otherwise people will try and iterate over them to get all your data, and overload your site.</li>
<li>Don&#8217;t add features that already exist elsewhere. For example your site doesn&#8217;t need a messaging system &#8211; use e-mail instead. </li>
<li>Add features that people will use; this is not always what they ask for. Get to the root of each feature request &#8211; what exactly is the user trying to do, and is there a better way of doing that than what they asked for.</li>
<li>RSS is the web&#8217;s native style for a list of links. Put RSS everywhere you have a list. It&#8217;s another way for users to get data from your system. del.icio.us has more RSS than HTML traffic.</li>
<li>Sensible URLs: They get passed around, bookmarked, mailed, etc. They should be user-friendly, not developer friendly. Don&#8217;t include session ids, or implementation specific details on the URL.</li>
<li><p>Release early and often. No closed beta.</p></li>
<li><p>When you block spammers, don&#8217;t let them know. Don&#8217;t display an error message, or change visible behaviour. Otherwise they start trying different methods.</p></li>
<li>Understand user motivation. The application has to be useful for user number 1. Users are selfish. Ideally people use the system and evangelise it. They come for themselves not for the data others created.</li>
<li>Measure how people react to new features and how long they keep using a feature. Rely on what people do not on what they claim.</li>
<li>Do user acceptance testing. Everyone involved in the project should watch this. If you can&#8217;t afford a test lab (with a two-way mirror for the team to stand behind), do <em>ghetto testing</em>: Buy people coffee in the local Internet cafe and show them the application. Don&#8217;t give them goals, just let them be normal users.</li>
<li>Speak the users language: Only Netscape / Firefox users call them bookmarks &#8211; IE users call them favorites.</li>
<li>Don&#8217;t force users to register. Or if you really need to, delay it as long as possible. Give as many public features as possible. Make registration short and afterwards send them back to where they were.</li>
<li>Understand the <em>Internet design grammar</em> and choose when to follow it and when not to. For example clicking the logo in top left corner goes back to the home page.</li>
<li>Remember that the data is not yours, it belongs to the user, and you&#8217;re just borrowing it. Allow users to export their data, delete themselves completely from the system, etc. Having an API helps with this.</li>
<li>The clients to your web app aren&#8217;t just browsers. Think of everything that can take data from your server: RSS readers, iCal clients, Excel, widgets (Konfabulator and Dashboard) etc.</li>
<li><p>Build a tool, not a community. Unless you are explicitly trying to build a community.</p>

<p><a href="http://del.icio.us">http://del.icio.us</a></p></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.darkcoding.net/software/joshua-schacter-delicious-things-weve-learned/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
