Thursday, July 30, 2009

Adding New Features: Not as Easy as you Might Think

There's a great post by Brent Simmons (he's had a few good ones lately actually) about the thought process and decision making that goes into adding even what, to the average user, would appear to be a simple feature:
I recently added a pretty easy feature to NetNewsWire — a Send to Instapaper command. (It will appear in 3.2.)

It really is just a quick http call to the Instapaper server to add a URL to the Read Later list.

Piece of cake.

But of course it’s not as simple as just writing a quick script. It’s tempting to think that adding a feature like this is just about adding the functionality — but there’s a bunch more to it than that...

It’s not enough just to write the basic functionality and add a menu item that runs it. Even a feature as simple as this one requires some up-front thinking, some design.
Anatomy of a feature

There's a good follow-up post by Daniel over at Red Sweater too.

Funny Brent should post about this very subject. I just finished going through something similar for MacGourmet 3. I'm revamping the ingredients list in the editor to be an outline instead of the existing table. Sounds simple, right? Wow, it wasn't. Sometimes adding or redoing a feature, even when planned, has unexpected consequences that must be dealt with, and hours later, when you've finished, you realize it turned out to be a much bigger change than expected, even though you thought you knew exactly what needed to be done.

Brent's post gives a good example of just how much thought must go into even what appears to be, on the surface, an easy change. I was actually thinking of doing a similar post. I don't have to now, read Brent's post instead, he pretty much hits the nail on the head...

Friday, July 17, 2009

Brent Simmons: Don’t offer $50 for your favorite feature

I've never gotten the cash for feature offer, but I couldn't agree with Brent more...
But here’s the important thing: the developer you’re talking to has one thing in mind: to make great software that delights people.

With that in mind, the developer may or may not want to do that feature. The $50 is nothing. If it’s the right feature and the right time to do it, the developer will do it. If it’s not, then it won’t get done.

So many things go into how and why we add every new feature, the least of which is any kind of cash compensation. The wants and needs of users and heck, how much actual fun we'll have adding a new feature, are all much, much higher on the list than any cash offer would be.

Don’t offer $50 for your favorite feature

Thursday, July 16, 2009

Bringing Some Sense to Contextual Menu Selections

Since the release of Leopard, there has been an "additional" selection rectangle that gets shown by default when you right click (or control-click) on a table. This second selection is in addition to the current selection. I've always found this behavior to be confusing. Not helping matters is that if you use Mail, or iTunes, this behavior isn't visible, but when you use the Finder, it is:

So what's right? Well, in my opinion, there is one major problem with the "focus ring" displayed when the contextual menu pops up. When you don't click on the selection: the original selection remains and the row you clicked on to display the menu gets a focus ring. What is the actual selection that will be used when a command is chosen? Well, it's hard to say. I think a valid argument could be made for either the original, or the new one.

Now, personally, I don't like the focus ring at all, and much prefer the way that iTunes and Mail handle this situation: no focus ring, and a click on something other than the selection changes the selection to the row clicked.

Changing this behavior in your app is easy enough, you just have to use your own NSTableView subclass and override the menuForEvent: method:

- (NSMenu *)menuForEvent:(NSEvent *)theEvent
{
    // This adds some sanity to the default NSTableView behavior,
    // which is just damned confusing: If the user clicks to display
    // the contextual menu, instead of having two visible selections,
    // one the original and one the blue outline, the current selection
    // is either outlined, or the selection is changed, the same way
    // that Mail does it.

    // Get the current selections for the table view.
    NSIndexSet *selectedRowIndexes = [self selectedRowIndexes];

    NSPoint mousePoint = [self convertPoint:[theEvent locationInWindow]
        fromView:nil];
    int row = [self rowAtPoint:mousePoint];

    // Is the row that was just clicked on currently selected?
    if ([selectedRowIndexes containsIndex:row] == NO)
    {
        // Change the selection to the row clicked on
        [self deselectAll:self];
        [self selectRow:row byExtendingSelection:NO];
    }

    return [self menu];
    // To display the focus ring, return [super menuForEvent:theEvent];
}

If you like the default focus ring, then just return the result of the call to super instead of the menu.

Friday, July 10, 2009

The iTunes App Store: Year One

So, here we are, one year into the iTunes App Store... Where are we, exactly? For some, the App Store has brought fame and riches... for others... not so much.

In January MacGourmet touch was released, after months of development. How did it go? Well, I can honestly say that considering the amount of time and effort that went into it, it still hasn't broken even. This is one of the main reasons why a) it's not a free add-on and b) why it's priced at $4.99. As much as I'd like to spend time doing things for free or for the "ultra low price of just 99¢", it's just not possible with this app. It can be complicated and every minute of every day has a dollar tag attached to it, and I'm just not at a point where I can give away my time for free... Still, it's sold well enough that I am planning and working on future free updates, so stay tuned.

As a Developer

One thing that's killing me, as a developer... is that there is absolutely no way for developers to comment or respond to comments in the App Store without including a rating. This is a huge hole in the process. We'll often see things posted there that could be responded to, but at the same time we don't receive email about the issue... so what are we as developers to do? Post a comment with a 5 star rating? A 3 star rating? If the reviews were all truly reviews that'd be one thing, but often comments are made about problems or misunderstandings that could be cleared up for the poster and other users... but there's no way for us to do that. There is also no way for us to send them email.

Another thing I have trouble with is the loss of control over my product releases. You never know how long it will take for your release to get through the approval system. Sometimes, rejections happen for very simple reasons, but the related rejection can set you back for weeks now. Things have only gotten worse since my January post entitled: The App Store Product Release Cycle: An Exercise in Frustration

As a User

As an iPhone user, I see a TON of apps of dubious quality, and it gets worse every day. More and more one-off 99¢ apps that are clearly money grabs. There are people out there who clearly see the "shot gun approach" as a quick (or possibly the only) way to make money, but all I see is more and more noise. Searching for apps is getting harder and harder.

For all the frustration we developers have with the App Store approval process, Apple seems to have no problems letting apps of questionable value into the store. And the more of those that get submitted, the longer it takes for all of us to get approval.

A post on pocketgamer.biz, on the 10 lessons learnt about the future of iPhone gaming has some interesting but not particularly surprising observations.
Almost all iPhone game developers we spoke to are increasing their number of releases...

The thinking is so many games are being released on the App Store, there's less point spending a long time polishing your game. Best take a shotgun approach and immediately support any success with fast updates and sequels.

Translation: more and more cheap no-effort dreck to wade through. Honestly, I hate to sound like a "Mac snob" but more and more the App Store is looking like Windows software sites on the web: lots and lots of apps that individually and as a whole, aren't really worth a damn. We don't see this lack of quality and overabundance in the Mac software market. That's always been a difference from the Windows-world. Now, we're seeing this weird convergence of the Mac and Windows applications worlds in the App Store...

Pricing

At least the iPhone game-makers seem to realize that the crapware model is unsustainable:
Cheap games are long term suicide

The contrary attitude, particularly from more established developers, states that selling games at 99¢ - despite micro-transaction support - isn't sustainable even for the smallest companies. Of course, there will be some examples of success, but the majority of examples of using 99¢ for both the razor and the razor blades will end in failure.

Craig Hockenberry, in an extensive year one review entitled Year Two (recommended reading) also says:
I’ve talked about pricing before, but not much has changed. The addition of in-app purchase is great for certain kinds of applications: our upcoming title, Ramp Champ, makes great use of it. But most apps cannot take advantage of this new feature and are left struggling at the ringtone price point.

These low prices are making decisions for us... The problem is that the long-term success of the iPhone platform will be defined by killer apps, not throwaways that you replace on your home screen after a few months.

Potential Piracy Issues

The App Store also seems to give rise to an easy single point of failure for piracy, again, according to pocketgamer.biz:
Not widely spoken about, especially on the record, but iPhone piracy is certainly out there and growing. One developer told us he thought it was running at about 25 percent on iPhone - compared to 90 percent for his Java games.

From a Mac app sales perspective 25% isn't just bad, it's TERRIBLE. True, there is piracy in the Mac universe too, but we all use a variety of registration systems, so one hack won't typically break the security of all Mac apps... this isn't true when talking about talking about iPhone apps. With the App Store and Apple's security, there is one single point of failure. Break that, and you open up every single iPhone app. This, on the surface is not a huge issue, but when you're talking apps that use servers, bandwidth, etc. all of these pirated apps could be costing small developers a bundle in bandwidth and support charges.

The Future

So where do I think we go from here? I do really appreciate Apple opening up another venue that Mac developers can use to generate much needed revenue, don't get me wrong. But personally, other than Cloudburst, a simple 99¢ app that I recently released, and new, improved versions of MacGourmet touch, I don't see myself dedicating much time to iPhone development.

Unless you have an iPhone companion to a Mac app, like MacGourmet touch does, how do you find any kind of traction? Unless Apple finds your app interesting enough to feature, most apps are liable to get lost in a sea of releases. With that in mind, it can be hard to justify spending a lot of time on something, only to see it sink like a stone in a sea of mediocrity.

There's also the matter of coming up with an app that never gets approved... after you've finished it and submitted it to the store. That can be quite a deterrent. I think Craig Hockenberry puts it best in Year Two when he says:
At present, it’s a crap shoot. When you roll snake eyes, you have no other channel to sell your product and you’ve lost a lot of time and money."

What would help? Quicker turnaround on submissions (it can take up to 3 weeks now, and it's only getting worse), a way for developers to respond to reviewers with problems and questions and better methods to search are just some of the ways that Apple could really improve things. Apple's done an amazing thing in the first year just getting the store up and running and in general working well, but we can only hope that they are listening to our feedback when deciding on the necessary changes for year two.

New iPhone App: Cloudburst released for iPhone

I recently added a side project of mine to the App Store: Cloudburst. It was one of the things I was noodling on while trying to learn app development for the iPhone. It got to a point where I finally decided to get Jordan Langille at OneToad Design to put some graphics and an icon together for me afterwhich I packaged it for release. You can get the full story here: Welcome to Cloudburst for iPhone!