SlideShare a Scribd company logo
Designing an App
From Idea to Market


Tony Hillerson        Juan Sanchez
Software Architect    Experience Architect


#AndroidOpen                                 ©2011 EffectiveUI
EffectiveUI              Tony Hillerson           Juan Sanchez
User Experience Agency   Software Architect       Experience Architect

@effectiveui             @thillerson              @juansanchez

                         “Building Android Apps   “Creating Visual
                         with Java”               Experiences with Flex 3.0”


#AndroidOpen
http://en.wikipedia.org/wiki/A_Journey_to_the_Center_of_the_Earth




Overview
We’re going on a journey.




AndroidOpen 2011
#AndroidOpen
Who are you?
Designer, developer, both?




#AndroidOpen
EXERCISE ONE




Design a Conference App
Like for this conference




#AndroidOpen
The features
• Chat
• Take pictures
• Edit profile
• View schedule
• See a map
• Check weather
• Scan QR code
• Watch video
• Review slides
#AndroidOpen
The features
• Chat
• Take pictures
• Edit profile
• View schedule
• See a map
• Check weather
• Scan QR code
• Watch video
• Review slides
#AndroidOpen
Too many features!
What should the app do?




#AndroidOpen
Getting up to speed
This will only hurt a little.




#AndroidOpen
What?




AndroidOpen 2011
#AndroidOpen
#AndroidOpen
Interaction Design
Exposing intent through actions and feedback.




#AndroidOpen
Process   Magic



               Form   Substance


#AndroidOpen
People think it's this veneer - that the designers
are handed this box and told, 'Make it look good!'.

That's not what we think design is. It's not just
what it looks like and feels like.


Design is how it works.
Steve Jobs

#AndroidOpen
Don Norman’s Design Vocabulary

  Visibility
  Affordances
  Feedback
  Mapping
  Constraint
  Consistency
#AndroidOpen
Natural Design
Use what people know from their environment.




#AndroidOpen
#AndroidOpen
http://www.subtraction.com/2011/03/28/an-illustration-for-stack-america




#AndroidOpen
Conceptual Model
The “model” a user of a system builds to reason about a
system




#AndroidOpen
Visibility
Cues between the design of an object and its operation




#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
Affordance
Perception that something can be interacted with




#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
Feedback
The effect of user actions should be obvious




#AndroidOpen
http://www.flickr.com/photos/meganbarton/3023756556/




#AndroidOpen
http://www.flickr.com/photos/meganbarton/3023756556/




#AndroidOpen
http://www.flickr.com/photos/meganbarton/3023756556/




#AndroidOpen
Mapping
A relation between intentions and possible actions and
between actions and their effect on a system or device




#AndroidOpen
http://www.flickr.com/photos/docsearls/181012863/




#AndroidOpen
http://www.flickr.com/photos/docsearls/181012863/




#AndroidOpen
Constraints
Preventing errors before they can occur




#AndroidOpen
#AndroidOpen
#AndroidOpen
Consistency
In the way visual objects are used




#AndroidOpen
http://www.flickr.com/photos/docsearls/181012863/




#AndroidOpen
Performance
People don’t have time to wait.




#AndroidOpen
http://www.flickr.com/photos/docsearls/181012863/




#AndroidOpen
Takeaways
Interactive elements should be visible, recognizable,
reactive (feedback), safe, and consistent.




#AndroidOpen
I know kung fu.




AndroidOpen 2011
#AndroidOpen
You do design already
Whether you know it or not.




#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
PUSH
 HeAR
ID10T
LOL!!1!
#AndroidOpen
Avoid   This




#AndroidOpen
Knowing your users
Get out and talk to people




#AndroidOpen
Jakob Nielsen: http://www.useit.com/papers/heuristic/heuristic_evaluation.html




               How many people you ask?




#AndroidOpen
Who to interview?




http://wingstoafrica.com/mali-pictures-part-2.html      http://www.kenrockwell.com/katie/2008.htm   http://good-times.webshots.com/photo/




#AndroidOpen
What to say? Where to go?




#AndroidOpen
Analyze your results
Turn your results into findings.
Summarize the findings in terms of
a set of agreed-upon design heuristics.




#AndroidOpen
EXERCISE TWO




User goals
And what they mean to you




#AndroidOpen
THE PERSONA

               Hilly Tonnerson
               • 19 - 45 years old
               • mobile developer
               • wants to meet other developers
               • has specific interests and questions
               • In this case, you can be the persona.

#AndroidOpen
What do you want to leave the conference with?
What do you like about conferences?
What environment are you in?
What do you hate about conferences?
What’s a day during a conference like?
Etc.



#AndroidOpen
What we came up with
We’re here to present on design and development
We want to share our presentation
We want to easily answer questions
We want presenting to be easier
We want to share more information
We want to know when/where we’re presenting
We want to know who is attending
Include people who can’t be here

#AndroidOpen
EXERCISE THREE




Feature Brainstorm
What’s the important stuff?




#AndroidOpen
What we came up with
A presenter’s assistant app
Controls the presentation with our phone
People can ask questions from their phone
People can “raise their hand”
The phone vibrates when there’s a question
We can control information being pushed to the web


#AndroidOpen
Designing for Android
Just a starting point




#AndroidOpen
Know the device
Dimensions, orientation, sensors, inputs, etc.




#AndroidOpen
Know the platform
This is not iOS, Windows Phone, webOS, etc.




#AndroidOpen
Embrace touch
People are using fingers, not cursors
Content as the interface
Multi-touch and gestures
Physical metaphors*



#AndroidOpen
Give each screen a purpose
Animation and transitions
Just-in-time content
Depth and space
Progressive disclosure



#AndroidOpen
maisdcharlottes.blogspot.com




Context
What’s the physical or device environment?
Usage patterns




#AndroidOpen
Android Guidelines
A lot of the work has already been done for you.




#AndroidOpen
When in doubt
Refer to the guidelines




#AndroidOpen
http://www.mutualmobile.com/2011/android-design-
guidelines-version-1-1-honeycomb/




#AndroidOpen
#AndroidOpen
“Rules” can be broken
There’s unexplored territory
We’re just at the beginning




#AndroidOpen
EXERCISE FOUR




Design a Conference App
Using the powers you’ve been given.




#AndroidOpen
Map out some ideas
What are the screens? Where can the user “go”?




#AndroidOpen
#AndroidOpen
Sketch out some screens
Can’t sketch? Work with someone who can.




#AndroidOpen
Here’s ours


#AndroidOpen
Get feedback
Validate your sketches meet the goals.




#AndroidOpen
What we heard
How can I see all the slides?
How do I switch slides?
Those icons don’t make sense
How do I know what slide I’m on?
I think this would be useful
I think this would be distracting


#AndroidOpen
Anyone want to share?
Bueller? Bueller? Bueller?




#AndroidOpen
You know what to build.
Now, how can you build it.




#AndroidOpen
Production
Tips For Realizing Visual Designs




#AndroidOpen
Beautiful Android
Eric Burke (Square)
11:35 Monday
Grand Ballroom B




#AndroidOpen
The source of pixels
What’s the toolset?




#AndroidOpen
Adobe Fireworks




#AndroidOpen
#AndroidOpen
Visibility
Menus and the Action Bar




#AndroidOpen
showAsAction
Avoid using “always”
Provide an icon and “ifRoom|withText”




#AndroidOpen
The Honeycomb Action Bar:
Front to Back
Mark Murphy (CommonsWare)
14:30 Tuesday
Grand Ballroom B



#AndroidOpen
9 Patch vs. XML
A matter of designer-developer workflow




#AndroidOpen
#AndroidOpen
#AndroidOpen
#AndroidOpen
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
	 <item>
	 	 <shape android:shape="rectangle">
	 	 	 <stroke android:color="@color/color_primary_light_stripe" android:width="1px" />
	 	 	 <solid android:color="@android:color/transparent" />
	 	      <corners
	 	 	 	 android:bottomRightRadius="6dip"
	 	 	 	 android:bottomLeftRadius="6dip"
	 	 	 	 android:topLeftRadius="6dip"
	 	 	 	 android:topRightRadius="6dip"/>
	 	 </shape>
	 </item>
...




  #AndroidOpen
...
    <item android:top="2px">
	   	 <shape android:shape="rectangle">
	   	 	 <stroke android:color="@color/color_primary_dark_stripe" android:width="1px" />
	   	 	 <solid android:color="@android:color/transparent" />
	   	      <corners
	   	 	 	 android:bottomRightRadius="6dip"
	   	 	 	 android:bottomLeftRadius="6dip"
	   	 	 	 android:topLeftRadius="6dip"
	   	 	 	 android:topRightRadius="6dip"/>
	   	 </shape>
	   </item>
    ...



     #AndroidOpen
...
	 <item android:top="1px" android:bottom="1px">
	 	 <shape android:shape="rectangle">
	 	      <gradient
	 	         android:angle="270"
	 	         android:startColor="@color/button_color_top"
	 	         android:centerColor="@color/button_color_middle"
	 	         android:endColor="@color/button_color_bottom"
	 	      />
	 	      <corners
	 	 	 	 android:bottomRightRadius="6dip"
	 	 	 	 android:bottomLeftRadius="6dip"
	 	 	 	 android:topLeftRadius="6dip"
	 	 	 	 android:topRightRadius="6dip"/>
	 	 </shape>
	 </item>
</layer-list>

   #AndroidOpen
Multi-Screen Designs
With Fragments and Resources




#AndroidOpen
What devices to target?
Try to get as much data as you can.




#AndroidOpen
What devices to target?
Try to get as much data as you can.




#AndroidOpen
http://developer.android.com/resources/dashboard/platform-versions.html




#AndroidOpen
Ice Cream
Sandwich
Is Coming
#AndroidOpen
Unified codebase
For all devices




#AndroidOpen
http://android-developers.blogspot.com/2011/09/
preparing-for-handsets.html




#AndroidOpen
Phone layout
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment class="com.example.android.TitlesFragment"
              android:id="@+id/list_frag"
              android:layout_width="match_parent"
              android:layout_height="match_parent"/>
</FrameLayout>




#AndroidOpen
Tablet layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/frags">
  <fragment class="com.example.android.TitlesFragment"
            android:id="@+id/list_frag"
            android:layout_width="@dimen/titles_size"
            android:layout_height="match_parent"/>
  <fragment class="com.example.android.DetailsFragment"
            android:id="@+id/details_frag"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
</LinearLayout>

#AndroidOpen
/** This is a callback that the list fragment (Fragment A) calls
    when a list item is selected */
public void onItemSelected(int position) {
  DisplayFragment fragB = (DisplayFragment) getFragmentManager()
                              .findFragmentById(R.id.display_frag);
  if (fragB == null) {
      // DisplayFragment (Fragment B) is not in the layout,
      // start DisplayActivity (Activity B)
      // and pass it the info about the selected item
      Intent intent = new Intent(this, DisplayActivity.class);
      intent.putExtra("position", position);
      startActivity(intent);
  } else {
      // DisplayFragment (Fragment B) is in the layout, tell it to update
      fragB.updateContent(position);
  }
}


#AndroidOpen
res/layout/main_activity.xml # For phones
    res/layout-sw600dp/main_activity.xml # 7” tablets
    res/layout-sw720dp/main_activity.xml # 10” tablets




http://android-developers.blogspot.com/2011/07/new-tools-for-
managing-screen-sizes.html

 #AndroidOpen
RTFS
repo and exploring how google does it




#AndroidOpen
http://source.android.com




#AndroidOpen
http://androiddrawableexplorer.appspot.com/




  #AndroidOpen
Questions?


#AndroidOpen
Tony Hillerson
               @thillerson


Thanks!        Juan Sanchez
               @juansanchez


               effectiveui.com

#AndroidOpen                  ©2011 EffectiveUI

More Related Content

Designing an App: From Idea to Market