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]