Developing Software
That Doesn't Suck
in WPF, Silverlight, or Windows Forms
A 3-Day Training Class
Detailed Syllabus
|
1.
Introduction – Why Software Sucks
Lecture: Users
think that today's software sucks. It's unsafe,
unreliable and hard to use. These problems are not
technical. We've been able to solve them for many
years, but instead we've gotten a paper clip with
eyebrows. Why? Software sucks because developers
forget (or never knew) THE bedrock principle of
software development: KNOW THY USER, FOR HE IS NOT
THEE. For example, what do your customers come to
you for? Hint: it's not software. For another
example, do you think your users care about your
application? They don't. Never have, never will.
They care about accomplishing the task that it does.
They don't want to think about you or your
application at all. It's your job to care about them
anyway. The talk will show good and bad examples
from commercial software and web sites, those that
understand and help their users, and those that
treat users with contempt. For example, consider the
ads for Microsoft Office that show non-upgrading
users wearing plastic dinosaur heads. Developers
fear looking like dinosaurs by not having the latest
technology, but ordinary users fear breaking an
installation that currently works, or having useless
junk like dancing paper clips slow down their
computers so they need to buy new ones. Your user is
not you. We put this nation on wheels not by
training the entire population as mechanics, but by
improving cars so they didn't often need mechanics.
The same transition needs to happen to the software
industry. This talk provides sound design principles
so that your software won't suck. Learn how
blindness will improve your vision.
Lab: Discuss your
current software products in light of the ideas put
forth in this lecture. Identify areas of it that
suck and areas that don’t. Discuss the sorts of
design modifications that would be necessary to
convert the former into the latter.
2. Using
Roles and Personas for UI Design
Lecture: It’s
very easy to say during the development process
that, “the user wants this,” or “the user hates
that.” But this nebulous concept of “the user”
leads to all sorts of misunderstandings. It is
surprisingly difficult to nail down just who these
user people are, what they like and what they don’t,
what they need and what they want and what they only
think they want, and what they are willing to
tolerate. It’s even more complicated because most
applications need to serve several different types
of users. Somehow “the user” always comes out
resembling the developer asking the question, which
is completely wrong.
This talk deals with the concept
of a persona, a fictitious character that represents
a particular class of user. We’ll discuss
generating personas based on the actual user
population, assigning characteristics such as
gender, ethnicity, and technological expertise to
the persona. We’ll add data and stories that flesh
out the personas: “21-year old Diego lives on his
iPhone all day every day, 42-year old Linda has
three children and needs to be home by 3:30 no
matter what, and 67-year old Harcourt won’t touch a
keyboard and insists that his secretary print out
all of his emails and take dictation of the
replies.” We’ll examine the process of
comparing the generated personas to actual users.
Finally, we’ll discuss using personas in the design
process: “Diego would love that feature and would
use it all the time, but Linda would never even
consider using it, no matter how many times you
showed her, because she doesn’t find it helpful, so
you shouldn’t bother her with it.”
Lab: Develop
personas for the design of your product that
represent the classes of user that you have
identified in your customer population. Expand them
and document them as much as permitted by the time
slot.
3.
Using WPF for Good and Not Evil
Lecture: Putting
the power of Windows Presentation Framework into the
hands of developers who are unschooled in the art of
user interface design is like giving liquor and
Corvette keys to teenage boys. It's fun for them,
temporarily, but the end results aren't pretty. “The
first time they see it, they will think it is cute.
The eleventh time they see it, they will think about
killing you,“ writes etiquette columnist Miss
Manners. Users don't give a flying fish about their
applications in and of themselves. Never have; never
will. They only care about accomplishing the tasks
that they bought the software to get done, so that
they can get on with eating and making love and
living their lives. Forget about color gradients and
button radii. Learn how to use WPF's power to
accomplish good things that your users actually care
about, not useless nonsense that does nothing but
titillate the rococo vanity of socially misfit
geeks.
We will examine the Family.Show
WPF application, often cited as a paragon of good
WPF design. We will study its use of three separate
WPF features: color gradients, motion, and
re-looking of controls. We will see cases in which
the app uses each of these features well, quickly
and easily improving the user experience far beyond
anything Windows Forms could do. And we’ll also see
different parts of the very same app using the very
same WPF features to degrade the user experience, in
once case inflicting genuine physical, not just
mental, pain on its user. We will discuss the
underlying principles that cause e
Lab: Examine your
proposed designs or your existing products in light
of the examples in this lecture. Identify usages of
advanced graphical features that help the user and
those that do not. Propose strategies for converting
the latter into the former.
4. Making Your Apps
Just Worktm
Lecture: Far too
many programs are designed from the toolkit outwards
– here’s what the toolkit does, so here’s what we
will do, regardless of whether it makes the user
happier. We’ll introduce the concept of user-centric
design, the importance of putting the user
experience designer into the user’s shoes, to design
software that Just Works™. We’ll examine the case
study of applying text styles in MS Word, between
early versions that required a drop-down selection
and version 2007, in which the user just
hovers the mouse over a sample style. We’ll go into
detail over the concept of the Undo operation and
how it makes an application explorable, discuss
various ways of implementing it, and consider how to
handle actions that can’t be undone. (Hint: it’s not
asking the user “are you sure?”). We’ll consider the
case of saving data, the automatic saving in Money
and One Note versus manual in Office. We’ll discuss
the need to ensure that edge cases don’t degrade the
mainstream cases, with a case study of the
Carbonite automatic disk backup program. We’ll also
discuss the need to ensure that the more frequently
used an operation is, the easier it is to do. Case
study: Vonage VoIP telephone web user interface
versus tray application. Finally, we’ll talk
about handling errors: recasting the concept of a
user error, preventing them from occurring, and then
minimizing that amount of thinking a user has to do
if one does occur.
Lab: Identify
areas in your current software design that sacrifice
ease of use in return for flexibility and power.
Discuss the sorts of modifications that would allow
your app to maintain the flexibility and power,
while making your app much easier to use without
thinking for users who only wanted the most common
cases.
5. Testing on
Live Animals
Lecture: You
never know how well anything works until you test
it. Somehow this principle often gets lost when it
comes to the user experience. What is obvious to a
developer who uses an application all day every day
is opaque to a casual user, or even a non-casual
user who doesn’t understand (or want to understand)
a program’s internal workings. User interfaces need
to be tested early and often so their efficacy, or
lack therefore, can be determined.
We’ll discuss the timing of user
interface testing, learn why waiting until the beta
(or even alpha) phase is never enough. We’ll
consider the frequency of testing iteration versus
the number of users; why more tests with fewer users
in each are better than fewer tests with more users.
We’ll address the issues and difficulties of
recruiting the test subjects, and the pitfalls of
Jakob Nielsen’s ideas on “hallway usability
testing”. We’ll see how important is the exact
wording of the tasks that you set for users and the
data that you put in front of them. And because the
user interface will evolve quickly as data becomes
available, we’ll discuss ways of generating
prototype user interfaces quickly. Finally, we’ll
discuss the art and science of making changes to the
user interface based on what you learn during your
testing, and strategies for handling the resistance
that inevitably arises.
Lab: Perform a
quick usability test on your company’s existing or
proposed products. Discuss the information that you
collect as a result, the lessons that it teaches,
and the changes that you would make to your product
as a result.
6.
Instrumentation For Knowing Thy User
Lecture: The most
important principle of user experience design is
“Know Thy User, for He Is Not Thee.” However, it is
very difficult to know exactly what users think of
your application – what they find easy to use,
what’s hard, what makes sense to them and what
doesn’t. If you ask them, they don’t know, or can’t
remember, or don’t want to admit they can’t use your
application, or don’t want to insult you. Even
finding users to ask is difficult, and current
techniques such as focus groups almost always
produce unrepresentative results.
The only way to know for sure is
to instrument your application so that it reports
user experiences over many sessions. This talk
will discuss ways in which this can be done and the
design decisions that need to be made to accomplish
it successfully. User experience tracking is
different from other kinds of program
instrumentation – it has to be very light, so that
it doesn’t degrade performance at all. Which
sorts of events should you record? How do you
convince users to opt in for data collection? How do
you send and store the data, and how do you analyze
it? A sample user experience tracking framework will
be demonstrated. The silent majority has a lot to
say, if you know how to listen to them.
Lab: Examine a
working application containing a user
instrumentation framework. Follow the flow of
information from instrumented application to
database to designer. Discuss how you would
instrument your own applications.
|