Author Archive for alon

Page 2 of 5

Carbon Five at SXSW 2010

We’re planning our return to Austin for the South by Southwest interactive conference with a session we have put together with the folks at Aardvark. Titled The Experiment is the Product: Innovation through Iteration, Rob Spiro and I are going to break down how we merged our Agile software development practices with their user-focused and research-driven product design process.

There’s great stuff about cheap and fast prototyping and testing techniques, building feedback loops in to product design, and how to come up with emerging product definition that can drive an iterative software development process.

SXSW weights community input heavily in its panel selection process. Take a moment to give our proposal a thumbs up.

Once Upon a School, Hot and C5 in Fast Company

I was just forwarded a great writeup in Fast Company of the work Hot Studio and Carbon Five did for Dave Eggers and 826 Valencia on Once Upon a School. Truth be told, the article is primarily on Hot’s fantastic contribution to the project. Check it out!

Vinfolio Launches Collector Marketplace

Vinfolio announced today the launch of Vinfolio Marketplace where wine collectors can buy and sell wine from their private cellars.

According to Steve Bachmann, Vinfolio CEO, the marketplace includes 27,000+ unique items already marked for sale – more than 170,000 bottles with over $20 million estimated retail value. That’s far more than any retailer/auction house on the day the marketplace opens.

Carbon Five worked with Vinfolio years ago to create and launch their groundbreaking procurement and storage service for wine collectors. It’s great to see that they continue to push their industry by creating new ways for wine lovers to sell, acquire and enjoy wine.

2008 Charitable Giving

Every year we donate a portion of profits to organizations and causes selected by the employees of Carbon Five. We neglected to update our site with the list for 2008 until today.

Personally, I am particularly psyched to be supporting the San Francisco Bike Kitchen in their move to a beautiful new space at 19th & Florida in the Mission. I have been volunteering as a mechanic with the Bike Kitchen for almost four years and have been continually impressed by the dedication and innovation of the all-volunteer staff and board. The bike racks at Carbon Five are full every day and the Bike Kitchen keeps many of us rolling smoothly to work.

Twitter transcript for our #agileux20 panel at Web 2.0 Expo

I grabbed Twitter search results for our #agileux20 hashtag so we don’t lose them later. Thanks everyone for your interest, comments and questions. Unlike Twitter search, these tweets are listed oldest to most recent so you can read them as a transcript of our panel.

joshdamon at Apr 02 10:59 AM
if you want to tweet questions to the design vs dev agile panel at #w2e, use tag #agileux20 and i’ll as many as i can to the panel.
chris23 at Apr 02 11:04 AM
How are you defining "design"? Is physical co-location a requirement for success in agile desi? Is upfront design required? #agileux20
razasaeed at Apr 02 11:04 AM
#agileux20 really interested in learning about user behavior testing …. how to figure out the impact of new design on existing community
moyalynne at Apr 02 11:04 AM
Shout out to Maria Giudice from Hot Studio, now at the helm in Room 2005 on human-centered design #w2e #agileux20
ericgrandeo at Apr 02 11:05 AM
Attending the human centered design meets agile development session #w2e #agileux20
moyalynne at Apr 02 11:07 AM
http://twitpic.com/2q72j – Human-centered design meets agile development #w2e #agileux20
AllanWolinski at Apr 02 11:09 AM
Tag #agileux20 for: Can’t we just all get along? Human-centered design meets agile development
moyalynne at Apr 02 11:09 AM
http://twitpic.com/2q773 – Maria AKA Wonderwoman moderates #agileux20 #w20
AllanWolinski at Apr 02 11:09 AM
#agileux20 Panel: @arenareed, Dave Shih, @asalant, @robsp, @mgiudice #web2expo
moyalynne at Apr 02 11:11 AM
http://twitpic.com/2q7at – Maria with her whip at the ready #agileux20 #w2e
_ilo at Apr 02 11:13 AM
RT @moyalynne: http://twitpic.com/2q7at – Maria with her whip at the ready #agileux20 #w2e
moyalynne at Apr 02 11:14 AM
http://twitpic.com/2q7gj – Agile Manifesto – Agile Values #w2e #agileux20
coffeemommy at Apr 02 11:15 AM
Work Utopia: Human centered design meets agile development; xp (extreme programming) #agileux20; seems logical. Let’s DO it!
joshdamon at Apr 02 11:15 AM
@razasaeed #agileux20 did @robsp‘s overview of aardvark’s research approach answer your question?
justinjscanlon at Apr 02 11:16 AM
#agileux20 do you expose functional prototypes to users, mockups, alphas? What tools are use?, irise, others? How often do you engage users?
moyalynne at Apr 02 11:17 AM
On Agile and Ux together — but "How realistic is it that user research actually happens early on?" – @mgiudice #agileux20 #w2e
moyalynne at Apr 02 11:20 AM
Clients might already have research they need? "I don’t feel like I’ve ever done enough user research" Arena Reed — #agileux20 #w2e
moyalynne at Apr 02 11:21 AM
How much user research to do and when to do it as key question in human-centered design. #agileux20 #w2e
dbcto at Apr 02 11:22 AM
#agileux20 Curiuos about differences btwn web sites and web apps from a agile UX perspective
moyalynne at Apr 02 11:22 AM
One thing that’s clear is that "design and engineering teams need to share knowledge during user research phase"– @mgiudice #agileux20 #w2e
moyalynne at Apr 02 11:23 AM
Here’s a hypocritical question: can user research kill innovation? #agileux20 #w2e
brendanking at Apr 02 11:23 AM
A lot of great ideas wouldn’t exist if they were user validated (like twitter) so do you always follow the user results? #agileux20
_ilo at Apr 02 11:24 AM
It’s a great question #w2e #agileux20 How much design *should* be done up front?
moyalynne at Apr 02 11:24 AM
No upfront design can be painful, and too much upfront design can be painful too — what’s the right amount? — Arena Reed #agileux20 #w2e
moyalynne at Apr 02 11:25 AM
"Anything we’re immediately developing HAS to be fully designed" #agileux20 #w2e
AllanWolinski at Apr 02 11:26 AM
Should the design phase have it’s own sprint including burndown? #agileux20
Mauronic at Apr 02 11:26 AM
How many people out there are using agile practices for visual design? #agileux20 #w2e I work with @thegroop and they rock it.
ceben at Apr 02 11:28 AM
What is an ideal ratio of product managers to developers in an agile process? #agileux20 #w2e
AllanWolinski at Apr 02 11:29 AM
What flexibility should developers have in changing or improving the design in following implementation iteration? #agileux20
coffeemommy at Apr 02 11:32 AM
#agileux20 : You mentioned "getting everyone in one room" suggestions on this process with a global/virtual team?
moyalynne at Apr 02 11:32 AM
Consultancies deal with a different issue, which is the need to document and deliver- the "do just enough" idea is difficult #w2e #agileux20
jedwhite at Apr 02 11:33 AM
You can’t track design the way you track engineering. It stifles creativity. #agileux20 #w2e
michaelbkim at Apr 02 11:39 AM
If you’re a hardcore engineer passionate about social search & looking for a new pre-launch startup opp, ping me. #w2e. #agileux20
AllanWolinski at Apr 02 11:40 AM
@AllanWolinski Designers on the panel use tracker for tasks but do not work within the scrum sprint/iteration #agileux20 #web2expo
moyalynne at Apr 02 11:41 AM
"The goal is working software in users’ hands — everything that gets you there is disposable" – on only "just enough" docs #w2e #agileux20
moyalynne at Apr 02 11:42 AM
What about for "lessons learned" and improving the process? What documentation does Agile preserve for that? #w2e #agileux20
joshdamon at Apr 02 11:44 AM
@moyalynne #w2e #agileux20 sorry, didnt get your last question in. they’re moving pretty fast.
joshdamon at Apr 02 11:46 AM
when they mention "track" the folks on the agile panel are referring to pivotaltracker (used for tracking stories) – #agileux20 #web2expo
moyalynne at Apr 02 11:46 AM
RT @arnoland: User research can never kill innovation, stifle but never kill, for that you need an incompetent designer -;) #agileux20 #w2e
lostonroute66 at Apr 02 11:48 AM
RT @arnoland: User research can never kill innovation, stifle but never kill, for that you need incompetent designer -;) #agileux20 #w2e
joshdamon at Apr 02 11:49 AM
#agileux20 #w2e thanks for the great questions, & aplogogies i didn’t get to more of them. follow up w/ speakers contact info on last slide
asalant at Apr 02 12:28 PM
Thanks everyone for the great comments and questions at #agileux20! #w2e
razasaeed at Apr 02 01:10 PM
@joshdamon They do not have a visual design so not sure .. especially when you need to roll out a new design and measure impact #agileux20

Join Us at Web 2.0 Expo

Maria Giudice from Hot Studio and I are following up our Core Conversation at SXSW last month on agile development and human-centered design with a panel Thursday at 11am at Web 2.0 Expo in San Francisco titled Can’t We Just All Get Along? Human-centered Design Meets Agile Development.

Our panel includes Arena Reed, Lead User Experience Designer at Grockit, Rob Spiro, co-founder of Aardvark and Dave Shih, Senior Visual Designer at Hot Studio.

At SXSW Maria and I realized how easy it is to talk about the challenges of coordinating design and development efforts since almost everyone involved in software development has experienced some pain around it. I’m excited about our panel for Web 2.0 Expo because I think we are going to better organize the discussion around identifying best practices. I am particularly inspired by the work of the Aardvark team who are intensely user-focused and test like crazy to validate their ideas and implementations while maintaining an agile software development process with frequent incremental releases.

You can follow our panel on Twitter with hashtag #agileux20 even if you are not at the conference. We welcome comments, questions and suggestions before, during and after.

When Worlds Collide: Conversation with Maria Giudice of Hot Studio

sxsw09

Maria and I have already started our SXSW Core Conversation When Worlds Collide: Human Centered Design Meets Agile Development two weeks before the event in Austin. The Core Conversation format is a speaker or two in conversation with the audience. Below we respond to a few select questions.

About the Presenters

Maria Guidice is CEO and founder of Hot Studio, a human-centered design studio in San Francisco.
Alon Salant is a principal and founder of Carbon Five an agile software development firm also in San Francisco.

Our companies have worked together over the years on a number of successful projects. We find our collaboration continually challenged by the differing perspectives of designer, developer and client. We love working together and are always looking for ways to do it better.

We Want to Hear From You

Join us for this conversation in Austin Sunday, March 15, 3:30-4:30pm. If you can’t make it, we have created a Google Moderator series to solicit questions from you. Please vote for questions you like and/or add questions and topics that you think we should discuss. Alternately, ask questions as comments to this post. We want to hear from you.

Let’s Get Started

Why is the issue of waterfall vs. agile so emotional for design and engineering teams?

Alon: We all work hard to do the best work we can for our customers. Software developers have struggled for years with the mismatch between heavy-weight planning processes, the ideal world they are based on, and the messy work of getting software built in the real world. Agile software processes provide an approach that deals very well with the real world while retaining strong professional rigor.

Committed agilists bristle at approaches that do too much planning for too far in the future. The further out you plan the more inherent uncertainty there is and the greater the chance that you are wasting energy on speculation.

For designers I think you can flip this argument around. If you start building something without knowing what you are building there’s a good chance you build the wrong thing and have wasted all the time and effort you put in to it.

Obviously there’s a middle ground somewhere. It turns out to be surprisingly hard to find.

Maria: I think the reason that this issue is so emotional goes to the very core of the fundamental difference in the way designers and engineers think about design.

The waterfall process affords designers the time and space to learn about the problem and craft a solution based on insight from understanding human needs, wants and desires. They then can craft a plan of action based upon big-picture thinking and strategic insight. From there they can be specific about details and functionality based on how the system works contextually.

The agile process oftentimes does not afford designers the time to think and requires them to design details out of context. This way of working puts them at great unease and anxiety that they are designing things based on hunches rather than validated user research.

Engineers, however, feel very comfortable working at a detail level that can be changed (theoretically) later on and can build towards a functional product sooner rather than later. Engineers may not understand the need or value to spend the time upfront—”why not jump in early if you have the freedom to change your mind?”

Think of the two processes like carving in marble vs. building in clay. It can be very difficult to switch design mediums they have worked on their entire professional life.

What is your greatest satisfaction when working with designers?

Alon: Designers have the gift of being able to represent ideas and solutions visually, in a form that all stakeholders in a project can understand and respond to. A designer can engage business owners and developers in a conversation about product requirements, priorities and potential solutions then turn that into a visual representation of one or more solutions. The visuals create a level playing field and focus the attention of all participants in a project. I love the role of designer as facilitator.

What is your greatest satisfaction when working with engineers?

Maria: We look to work with engineers that consider themselves equal contributors to the design process. Hot Studio is lucky to work with the folks at Carbon Five for this very reason. Too often designers view engineers as builders of “their product” and they miss the value of thinking about a design problem from an entirely different mindset. Great engineers understand the value of human-centered design and are active participants and contributors throughout the design process. Great engineers bring to the table that unique perspective that does not focus on limitation, but one of unique possibility.

What is your biggest point of frustration when working with designers?

Alon: Many designers, particularly user experience designers, feel they need to understand a problem in both depth and breadth before they can create meaningful solutions. Even when a project schedule and budget allow for up front research too often it is not enough for the designer and they feel they are working with incomplete information.

Projects can rarely afford exhaustive up front research and I get frustrated when designers use this as an excuse instead of coming up with an alternative approach.

I would like to find a design approach that could use some research up front to set a strategic direction and then break up a large problem into smaller problems to be tackled incrementally. Ongoing research could continue to be a part of the design process, conducted incrementally as the next problem to solve comes in to focus.

What is your biggest point of frustration when working with engineers?

Maria: I have worked with many engineering teams over the years, and like designers, they can come in many different flavors. I get frustrated when engineers focus on limitations, not possibility. When design thinking becomes limited to meet a tight budget or the need to jam as many “features” into a product based upon a set timeline, you run the risk of prohibiting “out of the box thinking” that can have an adverse effect on maximum customer experience. What some engineers may think the experience is “good enough”, designers may conclude that “no it isn’t”. This is a big point of frustration for designers regardless of the problem they are trying to solve or the process they are working within.

What will people come away with after attending our core conversation at SXSW on March 15th?

Alon: Our conversation will give people insight into issues in the collaboration of designers and developers and ideas about how to work together better. It is an opportunity for attendees to learn more about human centered design and agile software development and to challenge our ideas on those subjects.

Maria: I think people will come away with thinking that one size does not fit all. Follow a process, whether it’s waterfall, agile or a hybrid between the two, based on the type of project, the team dynamics, and the client’s need.

Can we all get along?

Alon: Sure. But it may be harder than we think. For this collaboration to be truly successful designers and developers need to better understand each others’ priorities and fears. It’s too easy to sit back in your own world view and say, “They don’t get it. If they did they’d do things my way.”

Maria: Absolutely. It really comes down to respect, empathy, and good communication from the client, to the designers, to the engineers. To quote the critically acclaimed “High School Musical 2″ film—”We are all in this together!”

Together, as design collaborators, we can produce great things together and hopefully, have a positive impact in people’s lives.

Proud to Support the San Francisco Bike Kitchen

This week the San Francisco Bike Kitchen opens its doors at its new location in the Mission at 650H Florida Street. The SFBK is an entirely volunteer run organization that provides the tools, parts and instruction you need to fix or build a bicycle yourself.

Carbon Five is proud to be a Titanium Sponsor of the SFBK and a supporter of their efforts to keep San Franciscans safely commuting and playing on their bicycles.

Read more about the SFBK’s plans for the new shop space and the recent move from their downtown location entirely by bike trailer in the rain. SF StreetsBlog’s coverage of the move also provides a good overview of the history and mission of the organization.

We chose our office location in downtown San Francisco so that our staff in the city, south, east and north bay could commute to work without driving. We get to work by MUNI, BART, Caltrain, Golden Gate Transit buses and ferries, by bike and on foot. Supporting the Bike Kitchen is a natural extension of our desire to create a sustainable workplace and work life for everyone Carbon Five.

Carbon Five and Hot Studio at SXSW in March

Maria Giudice from Hot Studio and I are speaking Sunday, March 13 at SXSW on When Worlds Collide: Human Centered Design Meets Agile Development.

We’ve worked with Hot on many successful projects over the years. As the name of our session suggests, we find our collaboration continually challenged by the differing perspectives of designer, developer and client. We love working together yet feel we could be doing much better. This session is about the good, the bad and the ugly of this collaboration and our insights into how you can do it better yourself.

I hope to see friends and colleagues at SXSW this year. Let me know if you are going to be there.

Custom Constraints for OCMock

In my last post on unit testing iPhone development I introduced a couple helpful tools including OCMock, a mock objects implementation for Objective-C.

I recently came across a scenario where I needed to make an assertion on an argument passed to an expected method invocation but OCMock did not provide the constraint I needed. I was testing a FileDetailsViewController that pushes a new FileContentsViewController on to the view stack when a button is pressed. I mocked the UINavigationController so that I could add an assertion that pushViewController:animated: is called with the right arguments.

The meat of my test is:

@interface FileDetailsViewControllerTest : SenTestCase {}
    FileDetailsViewController *controller;
    id navigationController;
@end
 
@implementation FileDetailsViewControllerTest
 
-(void) setUp {
    controller = [[FileDetailsViewController alloc] initWithNibName:@"FileDetailsView" 
                                                             bundle:nil];
    navigationController = [OCMockObject mockForClass:[UINavigationController class]];
    controller.navigationController = navigationController;
}
 
-(void) testShowContentLoadsView {
    [[navigationController expect] 
         pushViewController:[OCMConstraint isKindOfClass:[FileContentsViewController class]]
                   animated:YES];
    [controller showContentsButtonWasPressed];
}
 
-(void) tearDown {
    [navigationController verify];
}
 
@end

Note that in this example, I some fanciness is required to assign controller.navigationController = navigationController since it is a readonly property in the UIViewController API. I’ll explain what I did in a later post.

The OCMock feature I was missing is the OCMock.isKindOfClass constraint. So I wrote my own.

Following is the header file that declares the isKindOfClass assertion as a static method in an Objective-C category for OCMock. Categories are kind of like Ruby mixins for Objective-C. You can add static or instance methods to an existing class definition. With this approach I can follow the OCMock pattern of providing static factory methods on the OCMock class for the range of constraints available.

//File: OCMockConstraint+Extensions.h
#import <OCMock/OCMConstraint.h>
 
@interface OCMConstraint (Extensions)
 
+ (id)isKindOfClass:(id)value;
 
@end

Following is the implementation, both of my new constraint and the factory method to create it.

//File: OCMockConstraint+Extensions.m
#import "OCMockConstraint+Extensions.h"
 
@interface OCMKindOfClassConstraint : OCMConstraint
{
    @public
    id testClass;
}
@end
 
@implementation OCMKindOfClassConstraint
 
- (BOOL)evaluate:(id)value
{
	return [value isKindOfClass:testClass];
}
 
@end
 
// Static factory method
@implementation OCMConstraint (Extensions)
 
+ (id)isKindOfClass:(id)value {
	OCMKindOfClassConstraint *constraint = [OCMKindOfClassConstraint constraint];
	constraint->testClass = value;
	return constraint;
}
 
@end

This implementation shows both how to write a custom constraint for OCMock and a use of Objective-C categories to provide a nice API for using it.

In many cases, you’ll want to write a custom constraint that is specific to your test scenario and not appropriate to be shared globally in this manner. In this case you’ll probably follow a similar strategy but implemented in your test class instead of mixed in to OCMockConstraint.