---
title: WWDC2004 Session 408
framework: wwdc
role: article
path: wwdc/wwdc2004-408
---

# WWDC2004 Session 408

## Transcript

Kind: captions Language: en ladies and gentlemen please welcome manager of software technology evangelism John Glenn z hey good morning welcome to the second session of the second day of WC 2004 I hope that this is turning out to be a really great conference for you and and I hope that at the end of the week you you look back and say this incredibly valuable week for you and you've gained a lot of experience developing software platform so let's see is this right slide there we are this is the one on what's going on so this session is all about how to distinguish your application on the platform and we're going to talk about you I stuff designing for aqua we're going to talk about technology choices we're going to talk about planning your product and I just want to say up front that this a lot of this content is based on my experience and the experience of my team working with many of you and and your peers over the last year or two years helping you to understand all you know what's going on in the platform and how do you take your product to the next level and so this content really comes out of all of those conversations and all of those meetings and is an attempt on my part to just kind of you know clone those conversations and share the information that we've we've shared with so many other developers with you and it's not meant to be all-encompassing in any way shape or form but it really is i think it's touching on the areas that I think people have the most difficulty with so I hope you find it valuable and I'd love to hear your feedback after the session either through email or for through conversations directly with me I I want to talk about what it takes to create a great product on the platform and I want to do that by drawing an analogy with the food industry or the restaurant industry and I want to begin with the fast food experience right what do we know about the fast food experience well we know that it's there's a lot of unskilled kitchen staff right we know that that there's a lot of frozen mass Bruce ingredients it's all about getting lots of stuff out there really fast getting this material prepared quickly for the customers and a lot of masteries ingredients for nutritional value by and large most fast food joints aren't in existence for good nutrition even though there's a lot of advertising around that but that's sort of a fact and these are these are John's sort of statements about the fast-food industry they're not you know anything more than that but to take it for what it is a lot of artificial flavor I read a really great book recently that said that chicken McNuggets and such were you know produced in a lab and thus the aroma is that you that you smell are completely fabricated as nothing to do with the food itself so interesting what else we know what fast food is well a lot of poor presentation most of the time stuff it slapped together by unskilled kitchen staff throwing on a plate or in a container and there you have it right it's all about the speed with which you get the food and address your appetites and it is about the presentation and lastly we know that most mostly the fast food experience probably isn't that good for you right I say bad for you but maybe that would be miss representing things but it's not necessarily that good for you now let's compare the fat of the fast food experience with fine dining well unskilled kitchen staff is certainly replaced by highly skilled kitchen staff people who who have trained their lives for this stuff trained trained to learn how to cook and and put this stuff together in a really really great great way throws and math spruce ingredients are replaced with fresh ingredients a lot of times in fine dining with a really great meal it's all about the ingredients right it's choosing that basil the freshest basil right the greatest other ingredients and that that really adds to that whole experience and delivers a great meal for you good nutritional value by and large you know if you go to a great restaurant it's all about good food right the flavors are mouth-watering they're really good it's not our official flavors it's the real stuff right the real McCoy attractive presentation I mean some of the restaurants that I've been to and I'm know you know guy for oak cuisine here but I've been to some nice places here in San Francisco and the presentation has a whole lot to do with the enjoyment of the meal the food is fantastic but certainly presentation is great and lastly by and large you know the fine dining experience the food that you eat the whole variants in fact it's probably in a holistic sense really good for you it's probably good for you in terms of nutritional value but the overall experience to go into this fine dining evening or what have you is is good for you and so I want to draw this analogy between the analogy between sort of this the fast food experience and fine dining experience and software development on the platform I ran the Apple Design Awards this year and we and I do that every year and we get a ton of submissions this year we had less time to judge even more submission that we've ever had and I'll tell you a lot of submissions fell in the category of fine dining experience it was a fine software experience but there was a percentage that was really fast food it was somebody just threw something together ship the product and threw it into design awards and I think not i think this session is all about teaching you giving you the insight and expertise to create a really great fine dining experience on the platform with your software so what does it take to create a great experience a great dinner party or if you're the manager of a great you know a fine restaurant what does it take to pull this all together well essentially this kind of five steps and again you know I'm in a software industry i'm not you know i don't run a restaurant but this is kind of my perspective so take it for what it's worth but i think to create that kind of an experience for your customers it takes these five steps planning your menu extending a warm welcome creating a great ambience sweating the details right choosing the right the right silverware utensils choosing the right linen picking the right music and all of the stuff that goes into an evening that you might put together for your friends or if you're running a restaurant right all of those things matter and if some of them are there the whole the experience can go downhill pretty quickly and lastly ensure quality service a great restaurant can totally torpedo in your opinion if the service sucks if nobody's there to get what you want when you want it or get rid of stuff when you want to get rid of it it your opinion can go down fairly quickly well let's take that and compare it to the software development process to create a great application on the platform you don't need to certainly you don't need to choose your menu but you do need to plan you also need to create a great first impression as you walk to a restaurant with your date or whatever whoever you're going with right that first impression as you walk into the restaurant and you smell the aromas and you the temperature is right and the ambience is just great I mean that can set the evening off either to a great start or it can totally ruin the evening right from the get-go sweating the details for software development is all about paying attention and choosing the right fundamentals including the essential ingredients the essential elements in your product and we're going to talk about all of these creating an attractive ambience in the software sense I'm talking about creating a great ambience with your software through aqua and we'll get into that detail and lastly I think great service the analogy the software is delivering a really responsive highly high performance application and if you think of the experience that you've had running software you know that's the products that are less on your that are less likely be on your top choice are the products that are not really responsive or there is a lag in some way or that don't really respond in the way that you want them to I think that's a lot like the experience we have at restaurants where the waiter isn't there when we want it and and and our needs aren't met exactly so let's go through these individually first of all planning this is about deciding what to make and whom to make it for it takes there's about four or five steps here and this is not you know the all-encompassing list of what you need to do for planning your software this is based on my experience working with developers these are the areas that most developers I think don't spend enough time on so the first thing that's critical i think is understanding who your users are first of all first and foremost you're not your user you might come from the experience of your users you might have been a teacher previously in your previous life and now you're a software developer for k-12 or you might have been you know an accountant but now you're writing software for the finance for personal finance or what have you so you might have some sense of who your user is but you are no longer user you're the developer and you have business pressures and you've got all kinds of things that are going to that are going to influence decisions you make it's important for you to understand who your users are and what their needs are what their priorities are what their expertise is an understanding based upon their expertise that some some users who aren't that sophisticated are going to become proficient in certain tasks and your software needs to leave them to that towards that proficiency and they're going to graduate to more complex tasks as well but highly sophisticated users on the computer with your software are going to be masters at some tasks and novices and others and are going to be frustrated mostly when your product gets in the way oh this seems like common sense right true the matter is I think most software developers are trying to aim for whoever the heck will buy their product like okay let's just throw everything into this puppy and hope that anybody in the world you know whoever can buy it will buy it because it's just another customer for us but the truth is I think some of the best products on the platform are the ones that are focused very focused on our particular use of market segments and in a particular set of users and they address the needs of those users perfectly and those products totally dominate that space and think for a minute of some of the software that you use that fits in that space I mean I think all of us get a probably identifier product or two that fits into that so it's critical I think to pick your audience and know who that what their use their needs are and pay attention to how sophisticated they are and again a great example of this for example great example for example is if you were going for less sophisticated users and producing an iMovie type product I mean right from the get-go Apple said you know what I movie is for home users their infrequently on the computer they're they're going to be bothered or or hindered in some way by the multi-window environment of Mac OS 10 we'll just give them a full screen experience because they're totally focused on that at that exercise of editing video that was a very deliberate decision on our part to create a product for less sophisticated users clearly the experience with final cut pro or Final Cut Pro is different than experience with iMovie right so there's two examples of how the product design was influenced by the user the user base and that's kind of the point I want to make for you guys so the first step in planning with understanding users the second one is sort of knowing your application understand your application understand what it is that you really want your app to do and get a good grasp of that and I think as you come to define what it is you want your application to do you need to take into account the fact that you have you your company you as an individual you your company have certain value add that you can bring to the market with your product you have certain expertise you're certain you know inherence of strengths as a company or inherent sort of assets that you can bring to the ring to the product and your product should be built around those primarily it's important to design for usability understand what the workflow is is the users how to users expect to work with this product and how can we make the product map to that to that experience think about the interaction with other applications if your application is aimed for less sophisticated users in your a single-window product like iMovie was originally it's it's unlikely that the user is going to be interacting with other applications at the same time they're editing movies they're not doing dragged and dropped they might do cut and paste perhaps but not likely and so within the application of my do cut and paste but not with not any data exchange with other applications in that sense so interaction with other applications is important to think about as you consider who your user base is and all of these things in terms of planning help you to craft what your product will be and what its features that will be I find as I meet with developers that everybody's try you know most people are trying to do everything for everybody and so then they're demoing the products for me as I do aur review and they're showing off how the you know the app can do this and it can export an import and drag and drop and you know it can stand on its head and does all this stuff and I keep coming back to them sing well who's who's using this product well you know it's we've got some customers here and said well you know who's using this what are their needs and as I keep driving on that point developers realized you know what actually we don't need that we could drop that whole feature no one would care and the usability the product might might might increase so I don't want to belabor the point I got tons of stuff to go through today so when we move on deliver solutions and not features I hammer on this every year at WC and I think we're getting better in this as a community as a platform we're getting better in this in this regard but still and there's some examples I'll show you later on still there's this tendency to just pack in the features because there's pressure from your marketing team or whoever it is that's giving you pressure as an engineer to get those checkboxes on the side of the on the side of the product box right it's not about features for the user it's about whether the product delivers on the promise of what it can do so you need to be producing products that deliver an end solution for customers that is the be-all and end-all for them use the eighty percent solution this is really all about designing for eighty percent of your customers once you identify who your users are then you can sort of aim for trying to please eighty percent of those well defined for that well-defined audience a lot of people spend most of their time developing for twenty percent of their audience who tend to be the vocal minority it's the people who tend to be a little bit more sophisticated who can get that feedback into the developer through a blog or through an email or whatever mechanism there is the less sophisticated users kind of go well you know I'm not sure how to get the feedback to the developer so they're kind of silent they're the ones you kind of want to design for that rather than the vocal minority so keep that in mind don't always design for the vocal minority the best tools are the ones you're not even where you're using right if you think of a carpenter or a mechanic or any of the trades people out there in the world they have whole vast collections of tools why because every one of those tools is properly balanced it's tuned exactly for what it does and I think it's no different in the software industry I think I would much rather have a computer with hundreds of apps all that are tuned for what they're supposed to do all their scriptable so i can use something like Automator to start connecting them together and create a great workflow than having three apps that are just you know got thousands of features in them that I can't even find half of half of the features for all right third thing to do in terms of planning your product is understanding your market needs if you think about the characteristics for a moment of some of the best software you've used on the platform what would you come up with some of the characteristics of software in the best platform I think are the ones down here on the left some of the best software i've ever used with high-performance very responsive it was elegant it was attractive it was that easy to use i just i got into the thing and i was able to do what i wanted to do it was compatible as i started using it i realized hey I need this image from over here or this watch imma call it from you know some such other application and boom I could get it in there no problem very mobile right launch is clicked in my powerbook has no issues going to sleep it's just a really mobile application it's accessible let's talk about that a little more I think these are some of the characteristics that we all want in our probably in the products that we use whether they're the ones we write or whether they're the ones we use so if we look at some of those characteristics and then contrast them with some of the with some of the market segments that many of you are participating in and it certainly Apple is participating in it's interesting how some of the maps to those market needs this isn't meant to be the you know the definitive statement of where Apple's you know participating doing business this isn't meant to be the definitive statement of what the characteristics are for any it's again it's John's perspective on this this this this point and I think the whole point here is just to get you to think about what are the characteristics that you want in your application and how do those maps to the market segment which you're participating as you wander to understand who your user is you're going to identify them and place them within a market segment so let's just take the first two columns if you're developing a game for the platform water likely to be the highest priority characteristics for you that you want to you have within your product well high performance is key for games right great responsiveness great fast rendering of stuff on screen attractiveness games a lot of a lot of the sex appeal of games is how cool they look and what the audio is like and how a try the whole experience is and easy to use I think is important for games too if it's too hard to play like mom forget this contrast that with the home user with the home market you know high performances isn't as big a deal for them in fact I chose not to put it on the slide as an option for them i would say for home users for the whole market infrequent less sophisticated users typically elegance attractiveness and ease-of-use sir archy once you identify which characteristics you want to go after it's important to prioritize them so take those same markets again this is John's opinion this is not meant to be the authority but i would say four games number one is performance so if you're writing a game and you haven't run some of the performance analysis tools and tuned that product for mac OS 10 I think you're missing the boat in terms of your opportunity to stand out and distinguish your application on the platform relative to your competition responsiveness is again key I think the two go together and attractiveness home users I think the number one thing for most users who are less sophisticated as ease of use if you don't get that right your product I think isn't going to be as nearly as successful as it could be alright so once you've done all those things you sort of throw it all into the pot you stir up the soup and I think out of that comes a great a great starting point for and a great understanding for what your product can be and then it's from there that you go on to your development plans and you sort of figure out what your feature set will be and how are you going to end up delivering the solution that you think that market needs and again you know I touch a little before avoid the market buckshot approach buckshot market approach which is kind of like stick the product in a gun and shoot you know and hope it hits as many users as possible it doesn't work I don't think and most of developers I met with agree that if you focus the product you're going to get a great great experience and great business so that's planning step one the second thing is creating a first creating first great a great first impression this is all about surprising the lightning users from the start remember you go to this restaurant and you get this great aroma and the music is great and you think the people you're with our grade and the whole the whole thing is is awesome I think that is true for software as well and I've reviewed tons of software in my in the years at apple and and I'll tell you some get this right some do not I think first of all it starts with packaging what is your physical packaging like if you're in a retail store clearly some of you might be developing for enterprise or with for in-house or four schools there may not be a real package so that's fine just ignore this but for those of you in a retail store I think packaging is a big deal if you're not communicating the system requirements on the package you're setting yourself up for a tech support call which costs money because there's a user's going to call in and say hey I bought this product and it doesn't run on my machine and so make sure that system requirements are really clear if it runs on mac OS 10 put the badge on it distribution a lot of software goes in retail stores it's on a CD it's in a box but equally there's a lot of you selling software directly on the internet and that's great there's disk images are the way to go put your software in a disk image it's already compressed you can put a password on it if that's important but avoid compressing the compressed I have seen some really really awful really scary situations where I've got up you know I get a CD and there's sort of download something and there's stuff inside you know there's a stuffed it inside an HQ x inside of a dmg inside of a I don't know how that happens but it just does and it's something that we should all avoid installation is the core is a great way to create a great first impression make it that easy users by the product they spent money they want to get this thing up and running they probably have a real need that they want to satisfy and and if your product is a pain to install it's going to just knock down their impression the product dragging stalls are great disk images of support drag installs a thing mounts and you drag your your icon over the application folder or the user can put it wherever they want which i think is really critical for install disk images I don't know if you knew this but disk images allow you to display a software license agreement or a EULA it's a little bit hokey getting it to work but you can make it happen and so if that's the only reason you're using an installer so you can display some sort of legal license agreement you can actually get away from install or go to a disc game and put that license agreement in the disk image or go with Mac os10 package installer so there's a session later on today I think about using installer I think it's important to avoid shutting down other processes recently I installed some software for the Apple Design Awards and the blasted installer forced me to shut down everything that was running on my machine my browser my mail everything just so we could install the software I'm not sure why and it was a total pain avoid unnecessary authentication if you're not installing outside of the current logged in users domain and just put stuff on that inside their home directory what have you there's no need for sin occasion so don't ask me to do with etiquette it's a bother and avoid custom installers don't write your own thing just use what's available today on Mac OS 10 or from some third party system good software and installers that are available and the other thing is consider first time launch initialization or instant configuration so allow for a drag install but then the first time your app is launched build in sort of your own custom installer at that point but don't make it look like an installer just sort of display an alert that says one moment please you know while we get set up or you know if you're a game for kids say you know one moment please while Mickey Mouse gets you know gets ready to play with you or what have you and in the background you're installing some stuff so the I have four little girls and there's no more frustrating thing for me than when my wife calls is we've got the CD from you that you brought home from work to try and she says we can't install it and the girl or by nine year old calls and there's multiple installers it's a total pain and I think this was a great way to create a great first impression so I don't want to belabor the point now I was going to do an install a lousy install demo and I decided not to an end because to save the face of developer but I'm going to tell you about it so that there's no logos displayed this is an app that is it's an installer from a very well-known manufacturer of printers and it is it's actually for a scanner and so you download this disk image and you run this thing and it mounts from the desktop and there's a single icon you think okay great so but clearly not a dragon stall it's got a crummy icon looks like mac OS 9 and you double-click this thing and you get a license agreement you say agree and then it says it runs this funky custom totally non-mac interface look and feel and so okay figure okay and you click you know accepts or what-have-you whatever the question is and it says it's going to go off and install all this stuff remember it's just a scanner installer okay it's just making the scanner work that I bought and 11 minutes later seven authentications later and 2700 files later the software is installed and you know what I got a Rolodex software and I got this image editing thing and I got all kinds of other software some of which applied to scanning most of which did not and I'm like 11 minutes later why do I have to do all this stuff this is crazy and I think of a there's a great product at a germany from hamrick software called vuescan a single drag install it supports every scanner on the planet why this manufacturer couldn't do something similar to that it's just beyond me and I think your products i want to just encourage you your products should to create a great user experience from the get-go great first impression from the get-go so somebody gets to save face here but not really all right so finally set up in configuration make it painless i want to launch the app and get going use rendezvous to discover other users if that's important use Ronnie to discover other servers if your software needs to connect to something don't force me and enter IP addresses and don't force me to an arow you know all kinds of stuff to get the thing up and running get up and running and then ask me eventually if it's really critical that you need to know but there's nothing more frustrating than being bothered by software you know you're trying to get something going and it keeps stopping you because it needs some more information that it could have determined by asking the system getting it from system preferences or elsewhere so take advantage the API is a tarmac extent all right I'm going to move along here because there's a lot of stuff the fundamentals this is all about the essential elements that your product should have and I think pretty much every product in Mac OS 10 if you're shipping to end users in your application this is a big section that I'm going to talk about here but you know what this is the stuff that your app needs to be leveraging its not you're going to be totally you're going to be somebody else is going to stand above you in terms of the competitive space your competitors going to come out and adopt some of these technologies and I think they're going to they're going to stand head and shoulders above you as a result so understanding what the essentials are means that you need to understand what the Mac os10 environment is and what it brings to the table Mac lyst an environment is a single menu bar there's just one so don't stick other ones inside of Windows it's a layered multi-window eng system MDI doesn't cut it we don't want child windows inside of a single parent window that's what the desktop is right we want multiple windows that we can minimize to the doc they'll create some other doc inside of a window and you know the MDI experience it just doesn't cut it so if your app shipping on the platform this is a basic that you've got to adhere to another reality of Mac OS 10 is the doc the doc is there it's just there users can move it around the screen but it's a reality and it is there and your application needs to respect where the doc is because there's nothing more frustrating than unplugging your powerbook from a large display at work going on a trip opening up your your display and suddenly now this app window is hidden behind the doc and you can't resize it and you know little things like that so respect the docs position and sizing windows accordingly and there's some standard behaviors for when your app icon is clicked in the doc if it's already running opening windows etc etc it's all laid out in the human interface guidelines but if your app is on the platform this is a basic every user is going to expect this from your product and to not do it means that your competitor will and boom they've got one leg up on you Mackel is 10 is an always-on environment don't rely on rebooting to clear out caches or clear out temporary files it's an always-on environment my powerbook stays live i say i don't i think i probably reboot you know every couple of days for well I'll tell you why in a moment on the next slide but there's a reason why I reboot but you know what if I didn't have for that situation I probably would leave my powerbook on for days and not have to restart it's always sleep wake sleep wake sleep wake the system is always on don't rely on login items to be the way that stuff is going to start up if users cancel a process somehow and you're relying on login to start that thing up and there's no other way for the users start up that process I think you're in trouble well actually the users in trouble and they may not know to get you in trouble but another thing about Mac extends environment is that's highly adaptable the beautiful thing about laccoliths 10 is it adapts to all kinds of changes I take my powerbook on my bike to work every day and i plug it into a cinema display on my desk i plug it into ethernet network and i often unplug it throughout the day probably 16 18 times I'm going in and out of my office plug in this thing and unplugging it going to meetings unplugging from the wired hard land you know the ethernet and going on to airport so I'm just detaching and attaching displays I'm detaching and attaching the ethernet I'm unplugging and plugging my USB printer and that's the reason I have to restart my machine because it doesn't realize that it's an adapting environment and eventually it just kind of craps out and my machine has to be rebooted because I can't print any more because this driver hasn't adapted to the fact that I'm going to be unplugging and plugging constantly if you're developing software for the platform understand it's a highly adapted platform and therefore your app needs to be highly adaptive to and I'm sure you can all identify products you views that are not adaptive another key element of Mac OS 10 is multiple users this is true multi-user stuff it's not for those of you came from Mac OS 9 it's not pseudo multi using user environment mäkelä stone is a truly multi-user system and there's some implications for you the app developer because of that if you have shared resources shared blocks of memory or what have you understand that well first of all if you allocate memory and you expect that if you have multiple instances of your app running that they're going to use that shared block of memory then you can use a little trick called mock you know identifying those blocks with session IDs but understand because a multi-user environment and fast user switching a user could launch your app in one session somebody else could come along and say hey can I check for the machine for a second or you know can I borrow the machine get on it switch out to their environment and launch your app as well so now you've got two instances of your app running what do you can do with some of those shared resources and can you wrap handle that can it run in multiple contexts don't assume exclusive access to resources you might be running in multiple contexts if your app is using the isight camera right now and another user comes along and swaps out fast user switches to their account you need to give up that camera so that if they're using ichat or some other software that needs the camera or some other resource that that's freed up don't lock it and hold it so that nobody else can use it in any other user context not all users have the same access privileges so in one context if your app is making some assumptions about privileges on the hard drive it can't necessarily make those same assumptions in the other context in which it's running not all users can write to the applications directory multiple users if your app is running and users save default to their home directory and while i'm talking about home directories let me just make a point here that the documents folder is not is only for user created double clickable documents don't stick anything in the documents folder that relates to supporting you know application support files fast user switching introduces or brings 2222 light a interesting user experience which is I might be working currently on the machine in a bunch of software and I'm editing a bunch of documents that i didnt save them yet because that's how a lot of people work actually and someone comes along that machine think of the classroom context of a classroom or higher it or even in an office multiple users using the single machine current user is editing stuff another user comes along switches out to their it logs into their accounts so these files aren't saved right because of the classic stitches switched out and now the second user shuts down the machine well your app can do some basic stuff to deal with that and really create a great user experience and mail as the mail app does this today basically it's called fast logout an autosave as long as your app handles the standard quit Apple event you're going to get notification that the machine is going down or that your app has to quit basically and at that time make sure that your app can deal with saving a file to a temporary location provided by the system without any user interaction so just assign it some name untitled or what have you put it to the temporary location as draft and then when you're a free starts next time check that temporary location for any files that are of your type and open those things up automatically try it with mail it does a great great thing you're drafting some emails boom the system goes down next time you launch mail those windows open up how cool is that every app on the platform should be doing that another thing about the macros 10 environment is that it's a consistent provides consistent interface for common tasks the beauty of common of common interfaces is that users have the experience of picking people or fonts or whatever their their interview interacting with from other applications and so they bring that experience to bear in your application if your app then allows them to take fonts or choose colors in a completely different way that's custom for your app the user is a problem and so I think just using all the api's that are available micro scan for common error faces is just great it's just good it's a good thing to do some examples your address book frame or disk recording for standardized UI for that Apple helps for user assistance and many more I didn't even list half of them here yet another fundamental an essential on Mac OS 10 for pretty every up for every application with platform is the accessibility and spoken air face feature of Mac OS 10 spoken interface today's in a public or beta preview it's going to be shipped and built in the mat question tiger if your application if your product is shipping into education at any level or it's a government you need to understand that section 508 is a is a big deal most customers aren't to be purchasing software that's not section 508 compliant and there's stuff you can do today to prepare for these this capability coming in the future it's actually a lot of this is in Mac OS 10 Panther today the sex of accessibility stuff and spoken interface was designed for users who are blind or have low vision or other vision disabilities and other learning disabilities or learning disabilities its built-in not bolted on there's no extra installer no licensing to be done from you it works the same way in every application it leverages the keyboard shortcuts that you have in your app it just works with everything that you've done provided you follow the rules and there are rules for how to develop accessible applications for carbon cocoa and java every developer can do this and the experiences basically that everybody can participate in use your product all inclusive another reality on Mac OS 10 and this is really cool stuff is the multilingual capabilities the international technologies in Unicode supporting backless 10 enable you to ship an app that is that is deployable in dozens of languages Mac os10 up out of the box ships with what I don't know 16 languages your app doesn't need to do anything extra you don't need to license any extra fonts you don't need to creating the extra code for rendering these fancy characters Japanese or Chinese or Hebrew or whatever language you want to display in it's just air and it's for free provided you adopt Unicode well so many lights in the audience to say wow doesn't matter i deploy i just ship in in the UK or i just ship in north america well you know what there's more and more schools for example that have students coming in from other countries who don't speak in North America here for example more more students coming in who don't speak English who have a foreign you know mother tongue and they're coming into an English school how cool would it be if the software they used displayed an interface in their language in their mother tongue and the curriculum in English well let me show you what that would look like real quick demo but this shows shows off just how a standard app that's currently available in Mac OS 10 can show multiple languages in a single document so I'm just launching this RTF file it's showing in TextEdit one document no extra code in TextEdit to do this it's just Unicode compliant your app can display all of these languages it's all selectable text hi Greek Hebrew Arabic Korean Russian Hindi Bay something up and their work last night but anyway you know you could select this stuff drag and drop it to the desktop it's just standard behaviors and your app can do this and I I don't have time but we could switch out text edit to the finder change its default language it would launch in Japanese and this content would display exactly the same and I was just recently at any CC which is the education computing conference or whatever anyway with for educators and and this really hit home for the developers there the fact that they could deliver a nap on 10 that could display curriculum in one language or multiple languages and the interface of the application display in the native tongue of the student so just because you're not necessarily sending your product to multiple countries you might have users right at home who are multilingual and your app can take advantage of that deliver a great experience for them another reality I'm necklace 10 is gorgeous graphics right quartz 2d and OpenGL deliver some of the great stunning effects you saw in the keynote and all of that's great and all of its coming in Tiger but the truth is a lot of developers are nowhere near developing products that look like some of the stuff we showed in the keynote the reality is a lot of developers that I've interfaced with my team has met with over the last couple of years are still struggling with this cross platform thing and the problem with cross platform I mean from a business point of view I understand completely and we're going to do everything to help you deploy on multiple platforms but the struggle from a user experience point of view with cross-platform development is that you typically end up delivering a very sort of a lowest common denominator experience whether it's through the visuals or the interaction or the the quality of stuff on screen it typically isn't it doesn't ophtho isn't optimized for the platform the great graphics on Mac OS 10 enable everything you see on screen the transparency the shadowing the animations that are going on all of that stuff now is going more and more through the OpenGL pipeline and onto the GPU if your app isn't leveraging that stuff you're not going to get that great experience and the truth is if you take education for example in the education space case or 12 students are getting gorgeous graphics from surround sound and X fantastic you know multimedia experience on their game machines gameboy advanced x xbox right and so they're having that experience at home and then they come to school and they're running with your product in the classroom and you're you know on quick draw or you're doing something cross-platform so it's just it's just doesn't cut it and let me just show you I stunning you know rippling water kind of demos but I want to show you a three products that I think are really demonstrate this well so the first is I just want to contrast quick draw with quartz make it with and here on the Left we've got a fine product called Apple works and on the right we've got a product called omnigraffle and omnigraffle those diagrams and stuff anyway it's the point is it draws with quartz quartz TD and so I'm just going to zoom in on this stuff here and show you what's going on a little bit so first of all support for unicode text I don't know what this is in Japanese and for the Japanese in the audience I apologize if this is anything anyway I just put some characters in there but this is the same text in Apple works great unicode support so there's a problem there I noticed this let me zoom in it even more here look at this gorgeous anti-aliased text right look at a great smooth line here that's drawn and a circle fantastic nice smooth edges right not and you contrast that with great aunt Tilly's text that displays beautifully at any rotation any size any any effect you apply on it notice the circle is sorry didn't mean it meant to thank you seasick there those a circle with transparent this one is not no transparency supporting quick draw free in courts gradient fills a little bit more banded here in quick draw really pixelated graphics this is a rotated jpg quick-draw can't handle that very well at all this is rotated in courts now the picture itself is a little pixelated so I apologize that I whip this together and I'm not a graphics temmilan guy so but the point is these curves the text it's all great and when you contrast that with quick draw it just doesn't just doesn't cut it and so it's up to you right how are you going to differentiate your product this is a great way to differentiate it by leveraging quick draw 2d another app that I want to show you is this application its curve roll if you think of on Mac OS 9 there was the graphing calculator pretty cool app in its day right but totally quick-draw based this is Curvis pro takes full advantage of quartz 2d and OpenGL to do 3d models formulas based upon formulas that I have no idea what they mean and I distance stuff I failed in school but nonetheless you know here's another one this is pretty cool stuff and you know what because this app developer and this was submitted to the Apple Design Awards by the way it was written by a student because this developer used quartz 2d this stuff that they can print to PDF from an OpenGL context how cool is that suddenly that means that you that students can take this stuff print to PDF send it off to somebody who doesn't even have the app and say hey teacher look at you know the formula i came up with last night and is this right and what about this and you know whatever they can distribute this through PDF so i think that's pretty cool and so using the right graphics technologies enables that and lastly i want to show you the use of opengl i think that really enhances the students experience this is a product called starry night and i'm just going to go to a dark time of day and essentially what you've got here is you're in a field and there's some you know some stuff in the background mountains and stuff and as you point to the to the night sky any any star you're getting information about that star and stuff is moving along in real time until you see the night sky moving this is a cool product by the way if you just want to go out in the backyard with your powerbook and your your children and show them what's going on in the in the in the night sky you can even turn on light distortion from the city lights turn that on and it hides like most of the stars but you can get at some of the brighter ones very cool stuff well what you can do is using opengl here i could just say go to let's say Neptune so let's just say go there and it takes us off from the earth we go through the atmosphere and hopefully this is going to work nicely I don't know if you can see there are stars flying by my people bit difficult to see on screen here well maybe it takes a long time to travel to Neptune there we go here we go here we go here we go here's Neptune not a very exciting planet I don't know why we're a little jerky all of a sudden but let's go back to earth we're heading towards the Sun and while that's running let me just keep talking then we'll switch back to the slides in a moment there but you know for students this is so compelling this is so different than looking at a textbook and you couldn't possibly do this kind of stuff in quick draw so taking full advantage of the graphics on Mac was tender gonna let you distinguish your application like crazy on the platform over over your your competitors okay let's switch back to slides I'm not sure you know the problem with demos is sometimes they won great sometimes they don't it's probably my fault another reality on Mac OS tan is stuffed a year to vote in the keynote it's the spotlight technology this is certainly coming technology it's not here today but I think there are things you can do to start planning for this and it basically you've seen the whole you've seen the demos a couple times i'm not going to go through that but it allows there's some things you can do today to support it their support for standard stuff right out of the box but if you've got custom proprietary file formats you can begin to think about writing an importer for that you can you start using the standard keys that exist in spotlight but then you can help work with us in and as we build a community around this technology help us define some of the custom keys that we need to have for file types that we maybe didn't think about or for some work flows that are key in the market signal which you participate so more more information on the community stuff that we're doing so those are the fundamentals that's a lot of stuff but you know what when you bake bread you cannot leave out the key ingredients if you create a great dinner party for people there's some fundamentals that have to be there you've got to have silverware on the table you've got to have napkins you've got to have a cup right if you leave some of that stuff out the experience could go downhill pretty quickly it's the same thing with software development there's some fundamentals I think that are going to enable you to distinguish your app from the competition all right designing for aqua making things attractive and easy to use this was all about the ambience right first impressions now I get this product going now how do I feel about it as I use this thing is a girt great to look at and compelling his our information organized well and is the usability is it is it is it good and it's so important it's it that that it's almost like the real estate expression when you're selling a house or buying houses forget which it is i'm not a realtor and software but you know it's all about location location location right you can sell pretty much anything if it's in the right location and it's important location is important well you know what adopting aqua and creating a delivering a really great user experiences is that important there's lots of stuff you need to do and we're going to get into this specifically first of all ageless age-old design principles and you think I've heard this before i read the human error face guidelines you know 10 years ago 12 years ago well you know what this stuff is really important we're still thinking about these things as we design aqua and you should be as you design your application on on for the platform you should be thinking about these principles this stuff is not old it's it's true true as true today as it was when it was first you know thought up in and and presented and I'll give an example feedback in communication I think one of the key characteristics of aqua today is the fact that it uses animation through sheets and drawers the genie effect and different types of animations through expose and stuff to communicate status to users it takes us to a whole new level in terms of communicating status and giving feedback as to what's going on that's a real characteristic aqua mode lessness we've gone from being apt modal for many dialogues to being document modal that's a 10 that's a trend towards mode lessness we're less modal now within the application as a result of sheets so mode lessness is a key goal for us within Mac os10 of aesthetic integrity aqua is just gorgeous compared to what we had on Mac OS 9 or compared to anything else elsewhere i think the aesthetic integrity the gorgeous the beauty of baclofen i think just stands head and shoulders above everything else and if your app can't fit into that world it's going to stand out like a sore thumb and if you've been in my sessions before i've showed lots of examples on how that's true now adopting support designing a good interface requires that you follow those principles but also think about getting organized and by getting organized i'm going to talk about something called the users men model or their conceptual model what I mean by that is that it's important as you understand your markets and your users and what your feature is going to do and the solutions can provide users it's important that you start to think about now what is the users conceptual model or mental model as they approach the task that my software that your software is providing one of the concepts they're thinking about what's the workflow that their experience you know sort of what workflow of the experience what objects an object hierarchy exists in your product what expectations is a user bringing to the table these are these are big questions to ask and a lot of a lot of developers that I've interacted with haven't even thought about this stuff they kind of just you know their impression of what the software should do and they put it together and while it's compelling it's not nearly as compelling and doesn't register I think with a lot of users this is a really important concept to get a get get down once you figured out what that conceptual model is for eighty percent of your users it's important to reflect that model through the menu organization and layout an organization the main window toolbars utility windows etc we'll go through a couple examples and when you design your product to reflect that conceptual model it's important to keep these kind of five points in your mind as well can make sure that there are four dances if something doesn't look lickable users won't necessarily know that it is designed for Simplot keep simplicity in mind frequently accessed items should always be accessible some of the best software that I've ever used just instantly the stuff I needed was right there when I needed it and some of the products that won the Apple Design Awards that user bar tonight really reflect that concept well familiarity people's mental model is based on their previous experience we talked to earlier about leveraging the existing you I that's delivered through some of the API is in necklace 10 take advantage of that because it provides for a familiar experience for users availability it's a whole lot easier for people to see something on screen that they need to interact with then for them to recall some menu command that's two levels deep or some button in a dialogue right so expose the features that are critical to users so that stuff is available and provide good feedback to users and we'll talk about that more specifically so how does that apply in the real world in terms of the design that we've we've implemented for some software well if you think of iTunes and consider the mental model or conceptual model that most users have as they approach this they understand that it's a it's a music music management piece of software it manages our music and so they have an understanding that there's going to be songs in there there's going to be some way of organizing those songs they probably have this idea that you could play the stuff and then maybe they're searching and so the UI is modelled completely around that their songs to dominant part of the UI there's the collections where we organize the music into playlists smart playlists etc there's the playback controls right very clearly on the interface and lastly there's the searching functionality it's all there so the UI reflects completely or almost perfectly the mental model that users have as they approach the task and so users just get up and running with this product really fast they just get it that's what getting it means next example it's a product called unison unison from from panic these guys do great stuff this is a product that totally revives the usenet for Macintosh users now the user Nets got lots of content and will not talk about any of that specifically there's some good stuff out there and the mental model that you you approach usenet with if you know what it is you understand what its hierarchy is there's groups and there's messages within groups and messages contain pictures and and in other stuff if you don't know what use net structure is unisons product is so the unison is so well designed in terms of the mental model that it basically communicates the model of the environment to you the user and so you get it right away and so here basically usenet is all about groups and so the main groups window is structured in a way that you just kind of go through the browser view and there's a menu that supports that key concept and then within a message we've got the four elements of message files images music and so there's a message menu that part of it so the UI really supports the model that's that's that exists soft raid another great product in Mac OS 10 if you're doing raid stuff you basically have a simple mental model which is you've got physical devices which it calls disks you've got logical volumes on those discs called you've got logical volumes called volume and there's a menu to support that sorry and and then there's a utilities menu which I don't highlight sorry I run through these slides again the utilities menu which basically is you've got the TARDIS key by these volumes and then you do some utilitarian stuff to these to these drives or these volumes and you format them in your partition them or what have you and that's it that's the why and yet it's a highly complex highly functional product it does a ton of stuff but most of it is hidden behind the scenes for you the user because you don't need to be concerned with it another great product by Krauts if you're a cyclist this is a really cool product it basically lets you down or take a map formats there's a certain map format out there i cant rember the exact details but there's maps out there about cycling a biking paths or roots that exist in the world and you can load those maps into the product and then come up with custom bike trips and you choose different nodes and and then it's got this concept of a map but then a route and then within a route you've got the profile that route which is the altitudes you might cycle around what the instructions are for following that custom thing anyway the point is the UI totally supports this model that you come to which is that I've got a map and it's got routes on it and so the route could just be between those two points and there's a menu associated with that and that's it and so the mental model the user comes to this product width is supported by the UI and the hierarchy of objects and such is or is set up in the main menu bar as well but it isn't always that easy it's easy to get this wrong here's a great product and this is in no way meant to belittle the product in any way shape or form Mac journal it one and out design award years ago I think this is a really cool product but as one little thing that I think is is wrong and that is that as I approached this product and as most users approached the product they have this concept of a journal which is kind of the container objects right and within a journal you've got entries well the hierarchy of the main menu bar doesn't reflect that at all in fact if you think about app menu documents menu right file menu edit and then other stuff which is where you kind of go parent object child object sub child object etc that's what hierarchy you should reflecting the menu bar that's not reflected here so the journal which is the parent container object is actually further down the menu bar than the entry itself because journals contain entries entry is really in the place of the document and I personally I think that's that's backwards so the change I would say is just flip those around they call the window is called the journal window it's actually the document format etc and so I hope this drives home the point that the menu bar needs to reflect the hierarchy of your objects let's take another example if you're a multimedia authoring application you probably have your document format which is your project within projects you've got back a background well you might have seen scenes and backgrounds scenes also have layers layers have you know characters or objects objects have attributes and so you could imagine the menu bar going you know afnan projects edit seems you know characters the format you know for attributes etc so your menu bar needs to reflect that hierarchy from parents down to the smallest child sort of container element and if you don't get the mental model right at all basically you go back to what I was talking about earlier and then knowing your application slide which is you get just feature creep your product is all about features rather than a solution here's a product that is supposed to be a to-do list manager but it's so laden with features and buttons in the toolbar and I didn't even show the menu bar I don't even know where to begin I don't know what the model is that this application works on and so it becomes a problem the fee while it's a very very capable product and I'll just side note i'm working with the developer to make this thing pretty cool but I wanted to show an earlier and instance instance of this window because it's just it's just messed up and you have no idea what you're supposed to do a to-do list manager product to me should be very lightweight not in my face be there when I need it and then go away when I don't need it and all that kind of stuff and this app doesn't do that I can't sighs the window beyond a certain small size which basically takes up my old screen and there's too much stuff all over it so all right another element of career designing or great interfaces is providing great feedback in communication you know this is in my opinion great providing good feedback to your users is like the feedback in communication we need to have in good relationships in our life whether it's to our bosses or our teammates or you know spouses or children or what have you I think there's a great parallel that can be drawn there and if you think about the feedback that you provide in your application how you report errors or how you give status updates or communicate progress it may not be so non intrusive non interruptive which is really the guideline do it very tastefully do it in an appropriate manner but don't just stand up you know have something in your app that screaming and yelling saying oh transferred 14 bytes so 16 bytes or whatever you're communicating just like you wouldn't run into your boss's office during a project thing okay I fact that I stapled that report you know I printed that kind of thing which is all of minutia right boss really wants to know these key points I think the same thing is true when you're communicating different types of progress in your application you want to figure out what is the one of the reporting points what are those milestones that the user really wants to know about and then how do we effectively communicate the reaching of those milestones or the not reaching in those milestones so only communicate status that matters use appropriate progress indication so either an indeterminate bar or a determinant progress bar or the spinning gear thing and even and related to that I think consistent placements of those little gauges or dials or whatever you're using communicate status that should be really it should be consistent placement if you look at mail the spinning gear is always in the same place and users get accustomed to looking in that location for the for the for an update as to whether about machine is busy or the kabhi application is busy consistent place in the status of progress indicators another way of communicating feedback is through badging your doc icon you can you can like male does you can show the number of mail messages that are there and other apps are doing some really cool stuff with their their application icons and then providing users with useful error messages and indus abling commands that don't apply in the current context I want to zero in on these because I still see a lot of difficulty in this area so it's important to reward errors but not this way and this is out of shipping up on the platform it's important report errors would always check spelling so this says in case you can't read at the back of the room it says aim error could not add em forma cut maxcom guy on my team to your buddy list feedbag error 0 I'm not sure what a feedbag error is it's important to report errors or report a you know it report a situation that's occurred it might not necessarily be an error but it's something that's occurred that can't you know that stops that hinders you from proceeding further here's an app that I was playing with the other day and it requires that you drag and drop an image onto each side into these kind of giant image wells or whatever and so I dragged an image in out of iphone oh that was great and then I dragged another image which happened to be oriented differently than the first the one was portrait the other one came in at landscape and I didn't know it was no indication in the UI that I couldn't do that and so I did that and I got this this she came down it's a dragged image as a different size extender crop well I just dragged an image in here I don't want to extend or crop it and i'm not sure where distort came from actually and at this point I'm thinking okay but I can't cancel well now what's going to happen now in this case it's not a big deal but you know what if this was some some crazy real time you know not real time some crazy you know 3d rendering tasks that I just started and I couldn't cancel I'd be screwed because this thing would go off for you know a period of time and I'd be stuck because I couldn't stop the process you know the thing from processing whatever you know do whatever it's doing so I'm not sure what I'm supposed to do with this message it doesn't communicate enough and equally I don't know where the store came from so you know it's important to report problems to fish effectively and provide users with useful error messages and I've talked about this every year and I'm feel compelled to talk about it again so apologize if you were here before what happened is what you should say to the user then tell them why it happened and then tell them what they can do about it what's the solution to the problem avoid yes and no buttons there's a lot of ambiguity it's often very difficult to write a good error message and then have a yes or no button associated with it because the user can't well we'll talk about why this is there's that problem and then there's the other problem that is that users tend to scan the error message looking for kind of keywords you know that indicate the problem and your button labels should kind of capture those keywords to as the user scans that message to know which button to click you know there's something about preferences and then there's a button that says open system preferences so you just kind of go won't hit the button and boom they're off to solving the problem and then of course you could prevent problems from occurring the first place but just disabling many commands or buttons that don't make any sense in the current context but having forbid but that that would happen sometimes so here's the way of reporting an error you know error writing file to disk well it's a good sentence it's a complete sentence everything is there that you need to have their to be good English but it's a little you know it's not too outgoing so a better a better report would be this one the document could not be saved the disk is full okay so now I know a little bit more but what's going on and I could probably from this message figure out what I need to do which is if I want to save this document I've got to go to my go to the finder and get rid of something so I get more a little bit more space on the drive but a whole lot better would be to do something like this and what why is this better because first of all it communicates what happened the document trip of West could not be saved why did it happen because the disk work stuff not only is the disk full but it tells me which disk a lot of us have partitioned drives multiple hard drives I discs etc and now what do I do about it try deleting documents from that drive or saving the document on another disk that's a good error message and I wish I would get this kind of stuff in all of the applications that I run on the platform and it means a little bit of extra work on your part as a developer as an engineer because you've got to start looking at some of those error codes that are coming back from the AP is and that's hard but you know what the end result is a great great experience for customers and again prevention is the key rather than display a dialogue or an alert that's like this it says you must select at least one student before printing the student attendance summary report disable the menu items so I can't go up and say print student summary report if there's no student selected right it's easy you can do this and a lot of apps are doing it and I hope to see this happening at a hundred percent of the apps on the platform so prevent the problem the first place thing you don't have to look at the error messages and report this the alert alright I've got a few minutes left use standard controls if you're delivering software in the platform it should look like software on the platform so there's a ton of stuff in the system whether it's a scooter or a chai toolbox and these are just some examples of different sizes of controls many controls were shipped last year they're available in Panther today there should be used not in your main dialog boxes but they should be used in your utility windows and don't mix and maps control sizes within the same window whether it's the main window or a dialogue or utility window alright laying things out these examples are dialog boxes but they could equally be main windows and all of this is true for for any any window type that you're designing on screen so there's a tendency in aqua to Center equal and I see people getting this wrong over and over so that's why I feel compelled to talk about it for a moment Center equalized doesn't mean that everything gets Center aligned you know so that you've got kind of the center defect on screen this is a tab pain you basically lay out your content according to the layout rules that are in the humid air face guidelines that I'm going to touch on shortly but then you take a draw bounding box around all of it and sort of Center that box within the tab pain and each tab pain might have different edges sizes but it all gets centered in there here's another example of where it's done notice if you drew notice the orange box around the content that box is centered within the dialogue and then everything else is organized around that here is another thing that needs to be done and that is the right align all of your labels if you're labeling groups or labeling radio buttons or what have you those labels need to be right aligned along their colons they also need to have colin's behind them equally you left the line the controls in those sets and when you do that it looks great actually Oaks my apologies the last one is basically showing that within the under the size points there that that stuff is indented but it's left aligned with sort of the parent controls that it's under this is all about providing appropriate spacing I still see stuff crammed onto dialog boxes and and no margins and you know it just it doesn't feel like it's cleaned up nicely and so there's appropriate margins that need to be there there's there's standardized spacing for between items between related items in groups that are there there's a larger spacing between sort of less related groups and then there's a larger spacing between sort of distinct groups on screen and you don't even necessarily need the line the horizontal line that's on that screen action buttons go on the lower right nowhere else lower right and the ok button is on the right side and it's ok o.k not okie dokie or o ka Y or or you know different variants of that which I've seen it so this is really something I see and it's if you get it right it's great it produces a really great design but start your labels it check boxes and radio buttons with with verbs so that all the user really needs to scan at a glance and they know that if dinner is off it means it's not deterred right so it's really easy to figure out what the check box or the radio button really represents and there's a ton more I could talk about but I'm already down to like five minutes left in this session but things like quality icons and you know quality rendered icons and good organ organized toolbars you know not piling populating your toolbars with hundreds of icons or even 30 or 15 is too many in many cases you know we can't get into that file name extension support always displays that use the display name for the document if the user didn't name it with an extension they don't want to see the extension in their document window title quality graphics all of the graphics that you draw on screen whether it's static images or anything else should be drawn with quartz or at least if it's a static image should be drawn by a graphic artist a visual designer and reserved keyboard shortcuts please honor their reserve keyboard shortcuts that are identified the human interface guidelines so that's the fourth thing you can do a fourth area that you can focus on to create a product that's distinguished from the competition and the last area is really about delivering quality service right there's no bigger turn off than going to a great restaurant and getting really crappy service and I think when it comes down to applications the analogy I'll draw is is performance and you're going to get a lot of content on this at other sessions if you hadn't thought about this material before you need to think about this stuff because it makes a big difference performance is measured in two ways I think when you talk to users about performance they think about either number crunching just raw data processing how fast is it you know does the app blur an image or do whatever transform it's doing or whatever data processing it's doing and other users think of performance as kind of productivity and an interaction responsiveness all of those things can be tuned on knock 10 using a ton of tools that are available but really comes down to you need to build into your development cycle time to do the analysis using those tools your engineers are you the engineers you need to be started immediately using these tools because the results are dramatic in developer relations we hold workshops if you've been to one you know what the outcome is but if you don't know about them there are workshops that are held at Apple and we run developers through these programs for two days or three days or four days and we teach them these tools and at the end of three or four days we see dramatic increases in the productivity or the the performance of products just by running these tools and identifying bottlenecks in your code identifying where you could optimize for velocity engine identifying older api's that you shouldn't be using and there are modern more modern versions and that type of thing if you're a carbon app there's a bunch of things you can do today and the reason I bring up carbon apps specifically is it's the carbon developers in many cases who need to spend a little bit more time on these kind of things there's a lot of stuff you can do if your carbon app today on the platform to optimize for Mac OS 10 certainly Coco developers can optimize to I'm not saying that but you know be lazy don't start up your app and initialize every single buffer that your apps ever going to use during the jury you know that the user is going to potentially run into don't you know load all the movies and get all the files ready to go because so that when the user clicks um feature it happens instantly be lazy do all that stuff when the user does it because it makes startup times really slow reduce your memory footprint all this stuff majko binary formats free buying threads is a great session on threading this week by Xavier bro on my team really really good stuff there's good content here at the conference for making your apps totally totally fast on the platform so that's high performance great service deliver great service and so in the end there are five areas you could focus on and I think if you did these you deliver a great application for the platform and the pushback we get from developers as I meet with them often is yeah but you know what at the end of the day you guys have really small market share and so it's really hard to to get this done why would we do this stuff why would we go the extra mile for the platform and I always counter with the fact that well whatever the current status but Steve released the current status Steve released yesterday in the keynote is that there are there are 12 million mäkelä 10 users today sure there could be two hundred million but there are 12 million users today how many of you would like to have even half of those as your customers how many of you would like even a quarter of those to have a copy of your product and run that product right the reality is there are lots of users out there on Mac os10 who are not running your product and they're probably not running it either because they're not aware of it or because they've run it they had a poor user experience or what have you there's a variety of reasons but there's a lot you can do to elevate your profile in the Macintosh community and partnering with apple and doing stuff through developer relations we can help raise that exposure make sure your product is listed in the mac product guide make sure it's your posting on the right website make sure your app is optimized for the platform and is designed in a way that distinguishes itself from every other application think of the apps that you found out about just by reading a review about them that were totally awesome on the platform why are they totally awesome because they leveraged courts they were optimized for the platform they have gorgeous you I they they've done everything right or most things right and I would encourage you that to look at these five areas and a lot of other areas that are covered the conference and deliver this stuff and you're going to have a really really great you're going to have a really great i think going to get more customers in your business we're going to go up so lots of documentation available for you on the DVD i believe and if it's not on the DVD it's certainly available on the developer website or on the disk image that's downloadable off of connect on apple.com for this session great document is Apple software design guidelines check it out and the human interface guidelines and then tonight come celebrate here with the developers who did a lot of this stuff and really pretty straight products because we're going to we're going to highlight them onstage give them an award give them a powerbook or a g5 and a cinema display as a as a recognition of the great software and the great work that they've done so thank you for being here I hope this is a valuable for you and I look forward to your feedback and I hope you have a great conference this week [Applause]
