Goal Creep

I started exercising consistently about a year ago. I’ve tried off and on and failed repeatedly. I’d get on the bike all summer, lose a bunch of weight, and then gain it all back in the winter. I realized a year ago I was trying to do too much in the winter and the pressure of trying to do too much kept me from doing anything. David Heinemeier Hansson talked about goal creep in a recent blog post:

It didn’t take long before my ambition swelled, and I upped the goal from finishing mid-pack to top 10. Of course, not before taking a brief moment to bask in the glory of reaching that first goal, enjoying success per my own definition. A definition that would surely have qualified as utter failure for many others (what schmuck is happy to be mid-pack among gentlemen?! At the time, me!).

And thus, the goal creep was on. It crept from top 10, to podium, to moving up to a bigger series, a faster car, more downforce, tougher competition, longer races, a better team, and on it went.

My old problem is that I didn’t let goal creep happen. I wanted to be on the podium before I even learned to ride. Last winter I took a different approach. I decided I didn’t have to be my high school weight again in one year. (That’s a joke. I was 6’1, 145 pounds when I graduated high school. I wouldn’t even want to be that light again, even if I could.) I wanted to lose the weight over multiple years. My first winter’s goal was to exercise for 20 minutes four days per week then ride all summer. This winter it’s 30 minutes and five days per week. I’ll keep letting the goal creep until I’m at a happy weight and fitness level.

Hippocratic Oath Of Revenue Models

Fred Wilson’s post today, a precursor post to his Monday series on revenue models, turned up a lot of food for thought. This one is Fred’s:

I strongly believe that entrepreneurs should pick one revenue model to start with and focus 100% on making that work before rolling out another one. It is very hard to execute two or more revenue models at the same time. Better to nail the first one before rolling out the second.

Another comment from Fred, which was picked up by commenter takingpitches:

[Fred] I am a fan of starting with the most native and easiest to execute revenue model first. Ideally it will be one that improves the user experience or at least in no way harms it.

[takingpitches] It’s the Hippocratic Oath of revenue models: First do no harm.

To the question how do you pick just one model and focus on it, awaldstein said:

I sound like a broken record on this already… but the challenging part is discovering the monetizable value, not the monetization model. Sure the model ain’t easy but unless you sell chairs or smoothies, you need to determine what has enough pull (or the pull is increased ) by the model. Charging is the fun part as long as you have something of value to charge for.

And to the question when do you expand beyond the initial model, Fred responded:

When you’ve nailed the first and its [sic] all execution at this point

Fred talked about the idea of an atomic unit for a product a long time ago and I wrote about that here. William Mougayar and awaldstein got into a further discussion:

[William] The best case scenario is when your “Atomic unit” is very monetizable and valuable at the same time. The tweet is twitter’s unit & they can monetize the heck out of it, in more than one way.

[Arnold] Hard goods or services are one thing. You sell something. Marketplaces bring the customers to you and their atomic unit is that transaction. Twitter/Facebook…media models. It’s clear but still not simple to find a smooth way. Most people either ignore or dislike sponsored adds [sic]. Media models are based on tolerance and work when the population is huge. Understanding the atomic unit is one thing, making a transaction a natural part of the process is not always clear especially in early stages. And sometimes the atomic unit is the razor not the blade!

If this post’s conversation is any indication, this series is going to be incredible!

The Devil’s In The Details: Designing a Login Screen

I have been writing a lot of code lately for the new product I hope to share with you before the new year. The past two days I worked on a login/create account screen. Two days ago I wrote the shell, got the views created, did all the data entry and set up the basic structure of the controller. My designer set it up to be perfectly centered on the screen so I had to do little things like move it up when the keyboard appeared but only if the keyboard covered the form. Also, on the iPhone, once the keyboard comes up there is no button to make it go away. Touching outside the form hides the keyboard, thus uncovering the additional options. I hooked everything up and made sure it worked in the application the way I wanted. Then yesterday morning I handled all the error cases.

Error cases, for a log in screen? Yes. Login screens are funny little things. They look so simple yet if done right they are extremely complicated, from both a design and technical perspective.

Let’s start with technical. There are only two “good” outcomes in a log in screen. Option 1 is that the credentials entered matched an account and the user was logged in [1]. The second is that the credentials are a new account, an account was created and the user was logged in. But there are numerous “bad” outcomes, everything from the server being down to no Internet connection to bad passwords and email addresses, to incorrect passwords with matching emails [2]. In addition a good login screen must handle special cases like the user forgot his password or, for sites that make you verify an email address within a certain amount of time, verification failures [3].

And that leads me to the second thing: design. The app requires an account so the login view is the first thing the user sees. It not only needs to handle all these cases clearly and succinctly, helping the user when she runs into trouble, but I also needed to remember that this is the first experience she will have with our product. The login screen, albeit functional, also needs to represent the product once you get inside.

Our designer did a great job with the design. It is clean and simple. The interface is straight forward and offers features for those that aren’t certain they want to commit to an account yet but would prefer first to get a better perspective on the product. This is the era of app stores where people download apps, especially free ones, without even reading the description. We didn’t want to assume the user was familiar before installing.

I spent half the day yesterday getting all the error cases worked out, displaying each message with an alert and the alternatives for handling the case. For instance, a bad password (meaning an account was found but the password doesn’t match) could mean that it was just typed wrong or that the user forgot the password. We wanted to make sure both options were available.

The problem was, at about the five hour mark, I realized I hated the way it looked. The alert dialogs were unsightly popping over my form and slightly hard to read with the transparency. It was difficult, too, to relay the options in a straight-forward way. I also felt it needed an indicator so the user knew when it was working. I hate views that take a little time and give no clear indication that what I did had any effect.

So I went back to the drawing board. I stuck with the same login interface my designer designed, but instead of using alerts I created a second view that mimics the login view in appearance but first displays an activity indicator (spinner) before displaying a message, if there is one. The primary choice is highlighted cleanly, with secondary choice options below it. It took me seven additional hours to map all this out, set up a structure so all of this could be handled succinctly, and then make sure it all worked correctly.

I’ve designed a number of log in screens now and tried many different things with them. I never like the way they turn out. I know 95% of customers will spend five seconds on this screen, enter their credentials and move on, without realizing how much time and attention to little details went into it. I’m proud of the entire project and believe it will be a huge success. But when someone asks about the piece of code I am most proud when this project is completed, I may very well say it is this login screen.

[1] Technically not logged in. Instead the credentials are valid and they are stored in the app. Each time you access the site the credential, using SSL and other means of protecting your data, are passed to the server.

[2] The complete list of cases are: 1) an account is created and credentials stored; 2) the credentials are valid and stored; 3) user requested a new password; 4) no account exists with this email address; 5) the email is found but the password doesn’t match; 6) the server is down or there is no Internet connection; 7) the email verification was never completed and time has expired to use without verification; 8) invalid username (we handle this case but don’t use one as of this writing); 9) invalid email address; 10) invalid password; and 11) the account is suspended.

[3] Yes, I am using the word “user” (instead of “customer”) very deliberately.

Just Do Something

I’m burned out and need a few days with the computer off. Since it is Thanksgiving week here in the United States, I’m going to also take the opportunity to step away from the blog for a few days. With that, I wanted to leave you with something to think about this weekend. So I leave you with a story from Jonathan Moore about the almost drowning of his son. “You don’t have to do it right. You just have to do something.”

Great advice, whether saving your child or living life.

Opinionated

I received an email from a friend yesterday who was testing our Android version of powerOne. He was effusive about our templates but felt our RPN implementation was lacking, preferring the way the HP calculators did it. Our approach isn’t that different but he is used to their approach so when it came to pure calculator functions he used a different product, but always switched to ours for anything template-related. Some people love our RPN and calculator implementations; others don’t.

It reminded me once again how important opinionated products are. RPN, because of HP, was like that. Some people loved it and some people hated it but few were indifferent. Apple is really good at this, too. To some, Apple’s products are over-priced pieces of garbage that force you into someone else’s way of doing things. And to others they are minimalist products that generally just work. Apple’s products aren’t for all people, they are for some people, and Apple is very clear about this distinction.

That’s the holy grail for every product really. If it isn’t soliciting an opinion — a very strong opinion — than it probably isn’t doing much in the market. The problem for apps is when they cost $5 ($3 to the developer) there isn’t much room to market and sell. App stores are self-reinforcing anyway. The better you do the easier you are to find. So word of mouth is critical. And no one talks about products they don’t have a strong opinion about.