It's Insanely Hard to Make a Kick-Ass iPhone App
georgesaines.com
georgesaines.com
I've been trolling around the app store for awhile trying to understand the market and what I see are tons of novelty apps, fugly apps (by anyone's standards), buggy apps, and apps that break usability in all kinds of ways. And judging by the lack of any reviews for these apps, it's hard to imagine they spent much time on marketing, even just sending some free copies to bloggers to get their feedback and see if they might review it.
I'm not saying it's easy to hit points 1-3 above; it's not. But I wonder if a lot of indie app developers threw together something crappy in a few weekends of work because of all the stories out there about the big money being made, and then when it failed to materialize for them, they just gave up.
The App Store has gotten millions of people to collectively pay billions for software made by indie developers, which is amazing. But it's still a marketplace and the normal rules of any marketplace apply.
I would love for an experienced iOS developer making money to tell me if I'm wrong, and why.
Suggestions:
- Add a tweening for picking up and dropping letters
- centering of the board should happen automatically
- put the restart button somewhere else. It looks weird when you drop a letter on top of it and it appears behind it (e.g. the 'm' in 'seem')
- can't really tell from the video whether you already did this, but implement iPhone-like scrolling w/ momentum and bouncy behavior
To succeed, it seems that you now either need a mountain of luck, or a killer marketing engine and a fair amount of luck. Mathematically, it seems unattractive compared to other ways of applying the same time and skills unless you have something you're obsessed with building and want to produce irrespective of the outcome probabilities.
E.g. a $1.99 app pays at $1.393, so you need to move 34893.75 paid copies in order to clear a $50,000 gross. For SaaS and the same target, you only need 208.33 customers at $20/mo. The capture difficulty is not identical between cases - but if you have good marketing and are assuming serendipity on either side, it's quite feasible to hit 208 customers. Furthermore, it's often easier to grow once you get there, and it's quite possible to charge at much more than $20/mo/customer.
Mobile apps are great, but not a "for profit" activity for me. I'm all for doing them for fun or ad hoc, and if that takes off - great. But it seems to be a very difficult business model compared to applying similar resources elsewhere.
(I think the App Store gets a lot of ink because people have this notion that Apple does the marketing for devs like you. Which is true, in approximately the same sense that the MBA does marketing for basketball players like Shaq.)
For SaaS, it's also important to model things like trial conversions, turnover, etc. which don't appear in a single-sale case. There are a lot of differences. But the odds still seem better there.
And of course I am completely overlooking the "what about ads" question, mainly because you need a ton of installs before that starts being a significant amount of money. Better than not, helps feed conversions, but doesn't change the equation for me.
That said, the students loved it. And, he could also update the app as the course went along. Finally, although he only made enough through App Store sales to maybe go out for a nice meal, it translated into promotions, bonuses and the like. So ultimately, it paid off.
My main point is: in addition to selling niche apps at a premium, there's also the opportunity to develop cheap/free apps that otherwise help you move ahead within a niche market.
When I initially started 3 years ago maybe you could get by with just meeting 2 of the 3 criteria you mentioned. My apps at the time were useful and easy to use, but not really beautiful.
The free version of one of these apps was getting about 400-500 daily downloads. After a much needed UI update (and one to the corresponding paid version) daily downloads jumped to more than 3000 a day. No promos, no divine Apple intervention, just Polish Polish Polish.
5 of the 6 really good iOS developers I know personally work for clients. The 6th works for a mobile startup and has turned more into a manager.
However, most of them are getting into product as they have done enough consulting to see it is just like a normal job in many ways, no ownership.
I will buy your app later, look forward to showing it to some friends who dabble in music.
I'm curious: did you make the puzzles by hand or generate them algorithmically?
Algorithmically. The game actually came out of a research project into generating and automatically ranking the difficulty of puzzle games.
I have a long term plan to write a new game, with different puzzle games in it, using the same technique. The main slowness is a) Playing around with HTML5 and b) Figuring out how to make money off it (as with a webapp, you can actually lose a lot of money with hosting and servers, instead of the $100/year cap from Apple!)
Is a preliminary paper, we have a longer one in the works.
Despite that I do think you prove the point that the previous poster requested. Unfortunately yours is one of many examples of well-done apps that doesn't get traction.
Do forgive the critique, I hope it will be helpful to you in going on to make ever more amazing apps. And I'll curtail my suggestions here. :)
One day I'll hopefully manage to make a new game, with both parts done well.
Getting attention is hard. Ridiculously hard. Insanely, impossibly hard. I couldn't get a review from a single website. I submitted the app to dozens of review sites, food/drink blogs, and tech blogs and didn't get a single response. Actually, that's not true. I got responses from app review sites that wanted me to give them money in exchange for a review.
I made a trailer that has gotten 2,700 views (http://www.youtube.com/watch?v=Ctsk1QVs8OI). Almost all hits came from a video a friend and minor internet celebrity made for me. His video has 14,000 views. http://www.youtube.com/watch?v=rFn6eW2Kb0g
I fully admit my app is a niche app, but I think it's worth more than $420. Sites like Gizmodo have run "Best Cocktail Apps" and Apple regularly lists "Martha Stewart Cocktails" in Staff Favorites for iPad. It has approximately 12 total recipes but lots of high quality, high res images.
Compare with the Martha Stewart app. It is extremely polished and the photos look gorgeous.
I am not a designer, but you should get one to give you some suggestions. In any case, I just bought your app......happy to help out a fellow HN-er :) Hopefully this will help improve my cocktail-making skills.
PS> Check out a book called Tapworthy.
Also, the random feature on Alcohology is really interesting and would be incredibly useful. But why is it limited to an urbanspoon-style restaurant finder? Drink components don't seem to map well to that layout.
Perhaps allow for the input of an arbitrary number of components into a "bar", which then generates a list of potential drinks.
Or at least simplify the roulette selection to: primary component, style (cocktail, mixer, shooter, etc) and difficulty.
e.g. I have Whiskey, I want a cocktail and I don't want to spend a lot of time straining and cutting fruit.
That is exactly what it does. The second line of the description states "Alcohology is specially designed so you can see what cocktails your home bar can actually create" and the 3rd and 4th bullet points are "Customizable ingredients for your bar. Toggle to see all recipes or only recipes your bar can make"
Your comment has made it obvious that I have utterly failed in getting that point across. I'll re-work the description and screenshots to change the sales pitch.
Polished and went nowhere. Breaking the top 25 for an indie dev is hitting the lottery. It takes a big Ad budget and great PR.
This is completely false. You can get good performance with high level languages like lisp. It doesn't have to look like C to be fast and to be possible to optimize it well.
The whole "writing low level code is faster" mentality is WRONG for 99% of apps.
The software game industry is wrong too.
Abstraction is a good thing, not a bad thing. Abstraction helps us write better code, and can help improve performance. Abstraction is not something to sacrifice for performance; in general sacrificing abstraction hurts performance because the bottlenecks are things like humans understanding what's going on, being able to write good algorithms which is harder with lower level code, and how long it takes them (so how much time is left over to analyze and fix code bottlenecks).
Low level languages waste time while making things harder on programmers. And they do this to no particular benefit.
None of this is to say that Objective C is terrible. It's certainly a lot better than C or C++. It has some good abstraction capabilities. But there is absolutely no reason we couldn't use a higher level language on mobile devices and get better performance for less developer time.
(The biggest real obstacles are things like the unpopularity of lisp -- it would, sadly and irrationally, mean less iOS devs and hurt Apple -- and the lack of high quality programmers who understand these things available to hire to make it.)
What do you mean by "the software game industry is wrong too"?
2) For writing applications, desktop or mobile, nothing in the C++ libs ecosystem comes close to Cocoa/Touch.
3) For the task under discussion (iOS apps), it's the standard that get's 100% of official support from Apple, C++ is not.
I mean, if Windows Phone 7 uses DirectX, that is, compare to OpenGL ES.
Lisp is great i too agree even i like lisp very much, but a large part of the documentation available for Obj-C/Cocoa/Cocoa-touch is for Obj-C. That too apples documentation on the language and framework is the best available on the internet. Also Obj-C is a great language it is very similar to smalltalk and if you know smalltalk, Obj-C would be a joy to program in. Infact i felt Obj-C to be very similar to ruby conceptually.
This goes against any game company I worked. If anything, many are moving the AI code to scripting. Last company I worked had all the AI done in UnrealScript. Before was a mix of UnrealScript and C++ and previous was C++ with bits of lua mixed.
Never did I saw a line of assembly related to AI/Gameplay code in these games. (I was a AI programmer for about 4 years before leaving the industry in 2009)
I read this a lot but I don't know where it comes from. For me, 'fast enough' in terms of subjective performance of an application is 'as fast as the current performance benchmark on that platform'. Anything less implies the developer has taken short cuts and creates a bad impression. On mobile devices even more so.
Sure, if your app can be neatly divided into broad sections of performance critical and non performance critical code, then you can save the C for the bottlenecks. But it's hard to know ahead of time where those bottlenecks will be, nowadays even more so with highly interactive mobile apps. Look at all the trouble Google have had making Android scroll smoothly for example.
In a marketplace where users will dismiss your app immediately over tiny glitches and pauses, I'd be inclined to write everything in C++ other than the Objective C stuff.
Exactly. So the only reasonable policy is to use a language which is fast to write, and fast to change. Then, once you have software working, test where the bottlenecks actually are and change those parts (the majority of the time this does not require writing in a lower level language, just changing the design, fixing bugs, adding compiler hints, etc...)
> In a marketplace where users will dismiss your app immediately over tiny glitches and pauses, I'd be inclined to write everything in C++ other than the Objective C stuff.
By writing in inferior languages, you are creating apps with more bugs that take up more developer time (leaving less time to fix bugs, update older apps, etc). By your own claims, this means your apps will be dismissed. It's a mistake.
I'm not sure what you mean by inferior language. By this reasoning pretty much all of the best iOS and MacOS applications are developed with inferior languages...
I don't really see why an experienced C++ developer would create any more bugs than one developing in any other language. Most of the difficulties people complain about (explicit memory management for example) are massively overstated and not in any sense a problem for anyone other than a novice.
Not all languages are equally good.
Hacker News sure has changed...
Because lower level languages mean more bugs.
That's not actually a magical rule you know. The primary difference is that it's slower to develop in lower level languages. But users generally don't care about that.
Hacker News sure has changed...
Great argument.
Maybe I am wrong, I'm always happy to hear a different perspective at least.
The C family sucks, but it's not nearly as clear as you imply that there's a better realistic alternative.
[1] http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-wi...
(paraphrasing, fairly I hope)
> Objective-C is too much work/too low-level for your app/required because the hardware is limited.
Disagree. I wouldn't be disappointed to see solid Cocoa bindings in another approved language, but any programmer can learn C, and should. ObjC is a superset of C, and Cocoa is a beautifully consistent framework. The brackets might take a day or two to get used to, but they pretty much disappear after that. The much talked-about memory management model is not nearly as daunting as bloggers make it sound.
> Designing hugely complex monolithic apps is difficult on the iPhone.
Well, OK. I don't disagree with that entirely. But design is always serious work, information architecture is an art and science, especially for highly complex applications. That said, your app is not Photoshop and a good designer can solve your problems. Photoshop on an iPhone would be Difficult. So would XCode.
> App store discoverability is poor, marketing around launches is unpredictable, betas and limited releases are complicated or unworkable, audience feedback is a big problem.
Agreed 100%...! :)
Good luck with your dev!
Designing a large monolithic anything is insanely hard. It's often best to design around it.
One of the reasons mobile design is so hard is because you have to use 100% of the screen. Not only do you need to make it look good, but you also need to squeeze the resources of the phone. You have to worry about battery life, network usage, and storage space. It's a challenge, but it makes the end result a lot better.
The same rules really should apply to development on any platforms. Keep it light, simple, and focus on one thing.
I think the that kind of restrain on the user would make work on native mobile development side easier. All you would have to deal with is 2x views (portrait & landscape) vs all the possible combinations of web screen sizes.
Your point is very true for development (It's what I love about iOS) but for design it's a challenge.
It really makes you focus on the one thing. Take gmail for example. On the web, I can do 20 different things, but in iOS the choices are limited to 3-4. It's really hard to make things simple, so where you make the compromises is the challenge.
This made me chuckle. Maybe if you define "generation" as "this year's college output" then you might be right, but if we're talking "generation" as in the past lifetime of software development then it's nowhere close.
Only in the last 5-10 years have we seen the rise of the well put together framework.
Also, I have no experience with iOS, but the Android framework is pretty damn nice from the perspective of somebody who actually lived through the C64 days!
Think of all the crazy things we did pluggin ImageMagick into PHP backed by giant MySQL instances.
This is no longer really possible with mobile. I recently pulled in some image recognition libs to my app, and it's an extreme struggle keeping a large, legacy, C++ lib from exploding all over a mobile device. We really are stepping far, far, back from the previous trend of writing code as if the metal they run on is but a detail.
While I agree those were easy to use, I can't think of any crazy/cool things from that era websites.
Most of the cool/useful/nice web stuff is from the Ajax/fast JS/jQuery etc era of late.
"""I recently pulled in some image recognition libs to my app, and it's an extreme struggle keeping a large, legacy, C++ lib from exploding all over a mobile device. We really are stepping far, far, back from the previous trend of writing code as if the metal they run on is but a detail."""
It was never "but a detail", it was just that web development is seldom CPU/Memory-bound. Mobile development in the main is.
Also, if you were trying to do a competent 3D game engine, back in the same era you did PHP/MySQL stuff, you'd see that the PC metal was not "but a detail" at all.
It's also a little contradictory to lament about how easy it was to "plug ImageMagick into PHP backed by giant MySQL instances" and then compare it to the difficulty of not only programming for a mobile device, but also "pulling in some image recognition libs to my app".
Not only you're attempting something much more cpu intensive and difficult than using ImageMagick/PHP for web development, something that could have been just as difficult if not more so back in your web days, but you also try it in a device with less memory/cpu. Something's gotta give, right?
That said, nothing stops you writing plain apps for mobile that just do the same stuff you did on the web. There are plenty of frameworks that basically provide you with a browser view and let you do stuff (Platinum, etc).
Most of the cool/useful/nice web stuff is from
the Ajax/fast JS/jQuery etc era of late
Wikipedia, Blogger, Flickr, a bazillion forums on which I spent countless hours. Ajax/JS/jQuery are cool, however when it comes to usefulness many times they are superfluous. The old Twitter interface was a lot more usable. web development is seldom CPU/Memory-bound
This is only an impression because the hard work gets done by the database or other external processes that are outside of your web server. Business logic is cheap if you can delegate the actual data processing and when you delegate, of course it's going to be I/O bound. On the whole if you count every component, web applications are the biggest consumers of these resources. nothing stops you writing plain apps for mobile that
just do the same stuff you did on the web
I agree, you can also have a native mobile interface, while the whole logic is done on server. Like in the case of a chess game, you could have the minimax algorithm (or whatever) on the server, with a push mechanism to notify the client when the move is ready.I use monotouch. Compiles to ARM assembly. Not seeing any problems.
For a generation of coders accustomed to limitless managed memory, high-level programming abstractions, and thousands of deeply functional opensource libraries, mobile is a step back to the Byzantine world of Commodore 64s.
Really? An 8bit 1Mhz processor with 64Kb? Or is it a 600Mhz 32bit processor with 262,144kb. Sure it doesn't match up to my i7, but when java first came out we had Pentium 90s. The lack of ObjC library support is changing as more developers pile on, and if you go with C# then that's pretty much solved.
(As a kid in the UK, you had a ZX Spectrum, a C64 or a BBC Micro. The next gen Commodore was the Amiga. The next gen BBC was the Archimedes. The Archimedes had the ARM2. Same instruction set as an iPhone... in 1988. I shipped a game on it. 100% Assembly. Much prefer C# to hand-rolled assembly, so its not just the new kids.)
This is the reason the 600Mhz processor in your phone will have worse performance than a normal 600Mhz processor. Mhz is useless as a measure for performance and it became popular only because of marketing campaigns by Intel, when they had an edge in the Mhz race. A more useful measure (other than running unbiased benchmarks) would be MIPS (millions of instructions per second) and MFLOPS (millions of floating-point instructions per second).
For example an ARM11 from 2002 at 412 MHz was able of 515 MIPS (millions instructions per second), while a Pentium Pro from 1996 was capable of 541 MIPS at 200 MHz. Also an Intel Core i7 EE is capable of 177,730 MIPS at 3.33 GHz, while an AMD Phenom 2 X6 from 2010 is capable of 78,440 MIPS at 3.3 GHz.
Basically your 600Mhz mobile processor is not the same processor you had when playing Counter-Strike a couple of years ago. That's because it is optimized for consumption rather than performance.
I've done native development for iOS, Android, and WP7, and I'd be interested to see what advantage MonoTouch brings.
Just out of curiosity, which game was this?
(Just Another Archie programmer)
Photoshop’s submenus, window management, and setting
screens afford that software package a level of feature
depth I don’t believe can be achieved in a mobile
environment no matter how sophisticated and intuitive UI
conventions become.
I wonder if the author is aware of Photoshop for Android tablets - https://market.android.com/details?id=air.com.adobe.pstouchGranted, it doesn't have all the features of desktop Photoshop, but it looks like it has a lot of the features, and it has great ratings.
This is a general problem with mobile given how fast the hardware is moving along. And given that the 3GS is what, ~2.5 year old hardware? I don't think that it's crazy that an app won't run on anything less (I do think it's crazy that Apple still sells the 3GS). And I think consumers also kind of expect that if they do have older (pre 3GS) hardware, things are going to be slow. Also, despite the overall evilness of American cell carriers, it is kind of helpful to us mobile developers that they do their best to enforce a 2 year upgrade cycle with hardware.
Dictionary.com - what do I use it for? As a non-native English speaker, sometimes I do a quick check on a word I'm not sure of. But the app takes so long to launch. It activates GPS, it connects via the Internet to download some obscure data that I don't care about, it does so many things that leave me completely indifferent... and it fails to do the one most important thing that I DO care about: find out the meaning of a word really quick. Like, right now, please.
Sure you can turn off some of the extra features (but not all), sure you can reboot iOS to make it a bit more snappy, but the app still feels sluggish. And this is on an iPhone 4.
Folks, sometimes an app is just an app. All those features that you think make the app more appealing to the customers - are just dead weight that pull it down. Please, keep the apps lean and quick.
Although not an iPhone app, we've spent a lot of time in both developing and marketing our iPad game. But the revenue doesn't justify building another game which we would've loved to do. Developing an app is only half the battle, the other half is marketing it and as developers we are very bad at marketing.
Our criteria for a success was: Polished Graphics, Engaging Gameplay, Sense of Humor and a Cool Trailer.
Paddle Battle for iPad:
http://www.youtube.com/watch?v=xP2gnq6z3Fc
http://itunes.apple.com/us/app/paddle-battle/id415463249?mt=...
Spend less on marketing, more in making your app indispensable.
I don't know the android market well... it seems to be better, but only on the margins. I am surprised that noone has come up with a better way.
Also, remember.. there's a lot of commotion over mobile, but in terms of monetization, it still lags behind web display, and search ads.. it's not even close.
The user interface is everything if you want to compete in the major leagues (e.g. top 100).
My app is for film-makers, and it's called Acacia (https://market.android.com/details?id=com.ephemerald.cameraa...), and I'll fix the bugs when I have time :)