How much did Twitteriffic for iOS cost to develop? Craig Hockenberry answers.
stackoverflow.com
stackoverflow.com
The real skill is in explaining why this is difficult and actually how much design work needs to be undertaken to make these "simple, clean" looking apps
However it has to be said there are some quick wins for mobile apps that can be achieved quickly, however something like twitterific which is probably one of the top 2% of iPhone applications the effort expended is not that surprising unfortunately
Apple gives you a boatload of really thoughtful, usable UI classes. What I've read is that Android's SDK UI code isn't nearly as substantial or mature. Can you confirm if this is the case?
edit: Then there's Core Data for object modeling and persistence, which is a huge time saver. Is there an Android analog of this with comparable power?
This results in shitty apps that are costly to develop. Fortunately, most of the apps that people actually use don't do this, so it's not really a big deal for users.
The API's have more gotchas and simple bugs than the Apple ones.
The 1.6 API in particular has some hairy bugs.
The debug cycle takes considerably longer (almost 3x as long as the iPhone debug cycle for a non-media app).
The debugger doesn't work as well.
The lack of a GUI UI layout tool (there are some, they don't work well yet).
The project setup is considerably more time intensive (barring signing issues, which experienced iPhone shops don't have issues with really).
Now it's not all against android: The lax approval criteria and ease of market publications are awesome. I'm just saying it costs MORE to do android, I'm not saying don't do it.
And yes, you're right, custom widgets are harder in android than in iOS. If it makes you feel better, I find the amount people change iOS custom widgets silly too.
On the NS prefix: Lots of fun to switch between iOS and OS X dev. Wrote my first OS X app a couple months ago and it was weird to stop using the UI prefix for all the view classes.
My big wish for the next major iOS SDK is to get bindings. Those are awesome on the desktop.
Lack of GC seems to be an artificial constraint designed to force dev's to take charge of a situation with very limited memory. Unless there was some major overhaul to the Foundation classes.
Am I way off?
I wouldn't expect this. Honestly I'd expect things to go the other way: 10.7 maybe deprecating bindings on the Desktop for things like table and outline views. Particularly since they added NSTableViewDataSource/Delegate and NSOutlineViewDataSource/Delgate in 10.6.
I want GC on the iPhone. Not for the GC itself, just so Apple will make NSPointerArray, NSHashTable and NSMapTable part of the public API.
For collections, though, I feel like they're more likely to get you into trouble than to actually solve your problems.
I think you could do something substantially less complicated/powerful than bindings for the cases that bindings handle well, though, and I'd rather Apple did some innovating there than bring bindings over to iOS.
I'm also with the other folk who would much prefer to see Garbage Collection first. I rarely get into trouble with the reference counting system, but when I do it usually takes me forever to track down why my app is crashing without a single line of code written by me in the stack trace. Usually it's because I assigned an autoreleased value to an ivar in an init method while failing to retain it (a stupid mistake that I still make once every few months even after 5 years of Cocoa/Cocoa Touch work).
Will be astonished if they get deprecated on desktop, too. Value is far too high.
The estimates ranged from 'a weekend' to 'maybe a month'. The truth: pre-production with 3 senior people for 2 months, post-production and polish with a team of 10 for a year. There were a lot of little gem games at the time. There still is. But Bejeweled was the one that sold over 50 million units.
Polish, polish, polish.
Maybe the polish came after the MSN games version?
eg -> http://venturebeat.com/2008/04/21/popcap-games-executive-int...
They've got such an intersting story especially for HN audience - bunch of taltented guys in their 20s at the time, working for the man, going out to build something new and doing their best to survive while they got traction - I think their first deal was just $1500 a month for the original online version of bejeweld
I wasn't actually high. Just stupid. If there were a way to 'unaccept' an answer I'd have done so long ago. The user 'schwa' corrected me long before chockenberry noticed.
He thought it's quite high and he said he don't think such basic functionalities are quite hard to do. Yes, they are not. But testing, deploying, IE bugs, polishing and fixing are very expensive.
Software development is expensive, Polished Software is frikin' high expensive.
Incidentally, at $15-$20 an hour, you're severely under-pricing yourself, if you're in any major market in North America that I can think of.
Of course one you get to the stage of having a business with all the proper overheads and spending fixed hours with good programming knowledge it becomes next to nothing pay.
Raising your rates will winnow out the chaff and get you doing more serious projects that will look better on your resume.
I come across a guy with the same sort of attitude when I first started, occasionally hit up hes website to see if it ever went anywhere after I realized the work was dead end, it didn't.
Also, get a retainer. Took my 18 months to get money from a friend's company once. Retainers get rid of so much BS.
Always request a retainer. Especially for new clients. Even more so for friends and family.
I already figured out that I either get to the top (+$50/hour) from the first time or I stay low balled to $10-15. So right now, I'm improving my skills and building a portfolio.
Discovering what constitutes "polish" for your application takes enormous amounts of time, iterations, failures, and attentive and intelligent developers / designers.
Bottom line, if you cloned Twitteriffic in 160 hours, I'm certain I'd still rather buy and use the original, even if yours is free.
If you're in any of the big cities and your rate is significantly under $100/hour, you're probably under-charging if you've got decent experience and rep and are doing something heavily in demand, like mobile work.
$150/hour for devs as well known and with as good a reputation as the twitterific guys is pretty much par for course.
In general your highest rates are going to be in Toronto, Vancouver, Edmonton, Calgary, Ottawa, and Montreal (not necessarily in that order).
Consider Matt Gemmell's answer on his 5/10/20 yr plan below. For those who don't know, Matt Gemmell does bespoke high-quality UI.
In fact, the whole Q&A thread is fascinating.
> What do you see yourself doing in 5 years? 10 years? 20 years?
In 5 years, hopefully earning a full-time living from software products rather than contracting. Beyond that, it's a stab in the dark, but I'll have a go: in 10 years, focusing on writing, speaking, mentoring and such (still within this field). In 20, ideally back in academia doing research and teaching.
> The common factor is probably that you should only pursue things you really, really care about (whether it's romantic partners or your actual job). Life's too short for anything less, and finding something/someone great is a lot easier than you think.
Longer term, there's no way I'd realistically be able to be a mere employee without going nuts or locking myself out of the job market. Job hopping (I get bored with jobs that don't progress at my pace so quickly) looks terrible on the CV, contracting seems to be fine.
He writes at http://furbo.org and wrote the book, “iPhone App Development: The Missing Manual” (http://appdevmanual.com/).
If Apple had given them 30 days, they would have released a product on iPad day 1 that cost half the money.
I haven't added a single new feature yet after the initial 20 hours, but the app is obviously much MUCH better and easier to use.
Personally, I'm still learning how to bill my time out properly. I've got a serious case of underestimatitis. Maybe Craig's numbers will help me understand how much time I really spend on a project.
That being said, the larger the project is, the greater the probability of underestimatitis. As soon as you hit 250+ hours, I've found estimates to become increasingly less accurate.
The original estimate someone put forth for twitterific was 160 hours of development. Ask yourself, could you reasonably expect to sit down today and from scratch, have written something as polished as twitterific, in only 32 days? Knowing full well you will need to spend days banging your head against some problem that should have taken you 10 minutes but somehow cost you 6 hours, testing and fixing bugs, profiling and optimizing slow code paths, polishing interactions, tweaking animations, and going back to the drawing board when some piece of functionality doesn't quite feel right?
The testing and tweaking alone can last for weeks in high quality projects, and 32 days only gives you 4.5 weeks from start to finish. It's absurdly low.
The important part is not that the estimates match any number of hours per se, but rather than the relative weighting is about right, such that something you estimated as 3 points is, in actuality, about 3 times as much work as something estimated at 1 point, and all 1 point stories are roughly comparable in terms of work.
What you then do is to empirically estimate the actual mapping of points to hours/days as you work by tracking your velocity. In a 40-hour work week, how many points do you actually get done? As you get better at estimating, ideally your velocity becomes more stable, and then you can map from points back to days in order to make scheduling decisions. We switched over project planning and estimation to that strategy on a fairly large project I was leading, and it helped give us much more accurate overall estimates.
Now, that's all easier to do when you're working on a long-term project, you're familiar with the existing code base and the problem domain, etc. such that you can actually break things down into stories and do reasonable estimates.
That said, I think that the general idea of point-based estimation is still useful for you: rather than trying to estimate hours or days, work on getting better at relative estimation using something like points, and then empirically measure your mapping from points to hours to determine your likely schedule and how much you should bill.
Really good stuff is done by hackers and painters, therefore when you estimate your costs, you only tend to see the canvas and a little gouache, which are a commodity—just like computing. And perhaps some of your time, most surely, if you don't have a good time doing it.
Saying, that the painting of a picture costs X€ is about a code monkey who has no idea about what the real work is truly about.
But yes, management does have an interest in the devaluation of productive work to leave room for their own overhead. There are thousands of apps out there in the world, and from that perspective it is nothing but throw-away-junk, warranting a low price.
Is it possible that software is not like anything else, that it is meant to be discarded: that the whole point is to always see it as a soap bubble?—Alan J. Perlis
Those who compete with slaves will also become slaves.—Norbert Wiener
Of course Dayta is much less of an endeavor, but don't be phased because of the price of developing one of the best iOS apps out there.
I might have to think twice about whether I want to do an app to complement a webapp I'm doing in my spare time (no prior experience on iDevice development).
It would take me as much time to do a Rails app well as it would for someone who has as much experience in Objective C as I do in Rails (that is, not nearly as much as I do with Cocoa).
It takes a lot of work to make things look simple. And even more to make them well-done.
"I'm sorry this letter is so long, I didn't have time to writer a shorter one."
Prior to writing my iPhone app, I had 0 experience doing iPhone or Objective-C dev (I do have a comp sci degree which did help a ton.) All told it took me and my partner around 70 hours of dev/design work (some of that was me reading HCI guidelines for the iPhone.) We spent around $200 on an icon package, $75ish on an anti-hack kit, and had some server costs that got absorbed elsewhere.
It was a fun project and something we'll continue to play with in our spare time.
When applications are cracked there are various tell-tale signatures that are left behind such as modified plist files. These signatures are detectable by the kit, which I can check on via a call to the kit's "isCracked()" method. I collect this statistic, and if I wanted to could cripple the app.
Are the dev tools that bad that it costs that much, and requires so many people, to produce a concept to result?
Am I missing something? I must be.
Making something that is actually useful, beautiful and performs well will take much longer. This is where things like writing the API consumer bits, handling persistent data stores and so on come in.
Then you need to polish it.
It's not so much about the language or framework as they are great once you learn them, it's just that the standards are set very high in the App Store (at least if you wish to be taken seriously).
So yeah, I might seem ridiculously expensive when I go bill someone at $200/hour, but I make nowhere near $300k and out of what I do make, I don't get to save a lot after paying all the bills. But in exchange, I get a lot more freedom when it comes to working, which leaves room to do other things in my life. It's a tradeoff I'm willing to make because I can find fairly steady work, but I would never do it if I had a family or if making money was my sole objective.
That being said, I have worked on 20+ iOS apps now and most of them were finished with a MUCH smaller total number of hours than this. I don't disagree that taking something from "it works" to "it's elegant" takes time, but 1100 hours of dev time does seem a bit high. I, too, would be interested in more info (like total lines of code, whether or not they built a Twitter engine from scratch for the app, etc).
To anyone considering making an app: don't use this as a baseline comparison. You can get a great-looking app done in a lot less time than this.
The other not-so-obvious complexity here is probably the data model, which seems far from trivial, especially given the constrained memory environment (lots of images, etc.).
The times don't seem unrealistic at all to me.
Manual memory management, lack of functional programming, compile/test cycle, etc isn't free.
- You can mix static and dynamic styles as appropriate.
- You can mix low level and high level code as appropriate.
- "Manual memory management" != "Manual ref counting". I'm not saying it's wonderful, but it's a hell of a lot better than malloc and free.
- Categories are a pretty big OO power tool that you don't see in e.g. Java (e.g. Android)
- I would love to be able to efficiently write slick, efficient mobile apps with an REPL right on the device. And I would enjoy a pony.
I believe that Twitterrific uses MGTwitterEngine now, but originally had used its own.
#define A(obj, objs...) [NSArray arrayWithObjects:obj, ## objs , nil]
#define D(val, key, vals...) [NSDictionary dictionaryWithObjectsAndKeys:val, key, ## vals , nil]
I put these two macros in the prefix header for every Objective-C project I do. Say what you will about single character macros, these save me time and improve readability (for me, anyway... I'm not sure how others reading my code down the road fare, but so far there haven't been many of those).