There's a good quote from a John Carmack post on Slashdot in the same vein:
Focused, hard work is the real key to success. Keep your eyes on the goal, and just keep taking the next step towards completing it. If you aren't sure which way to do something, do it both ways and see which works better.
Agreed. I don't understand why more large companies understand this method...
The best way to build the best X, is to build 5 of them.. by the 5th you're pretty awesome at building X.
Seems like too many people believe instead, in meticulous up front design analysis etc etc.
The other point is that in my experience, the rewrites take less and less time to write, as you know more and more.
"Public APIs enable everyone to experiment with new ideas and create new ways of using your product. This is incredibly powerful because no matter how brilliant you and your coworkers are, there are always going to be smarter people outside of your company."
The only thing that worries me about this, is that in Twitters case, they have lost control to a large extent. They're not really a destination anymore. They're a backend service with a free API.
They're no longer the gatekeeper. Just suppose Twitter introduces some advert tweets in everyones stream. 3rd party apps could just ignore those. Suppose twitter does something else to try and monetize... The major twitter apps could just decide to get together and pass messages between themselves instead of through twitter.
Having a public API is awesome for innovation and growing userbases, but it seems like there could be a reasonable risk and cost to that.
I think a public API should not be so complete that people don't need to use your app anymore.
There's definitely a cost-benefit scenario, but I think in Twitter's case much of their run-away usage has been because exactly that ecosystem exists. It's like an early adopter's wet dream. My biggest gripe with it is the rate limiting since it means I can't actually build the apps that I want to.
(I'd love to build a friend-finder for it. Theirs sucks. That's a perfect setup for our graph discovery stuff, but we need to be able to traverse several levels out to do something useful with it.)
Hmm, if you stumble across it let me know. If you've build some secondary app that people are using you can probably get away with scraping out bits of the graph along the way, but most of the ones I've seen just do some very simple counting of friends rather than trying to do anything like finding clusters or trying to figure out which of them you're not likely to already know about.
Hey, I'm one of the guys who built WhoShouldiFollow. Glad the recommendations are working out for you.
The Twitter API rate-limiting makes things harder, but as a whitelisted app we haven't (yet) run into any situations where we've hit our quota or get throttled in any way.
Sorry but you are wrong. Twitter is Capitalism on the internet. It lets anyone compete and assumes the market will auto-regulate. Which is absolutely right. Although they let anyone use their API without much control, they know that if your app sucks, the market will not follow.
1. I wait until there are some clear Twitter client winners. I'd expect the market will diverge on a Killer Twitter client for each platform. Perhaps there's some alternate web interfaces with killer features, such that people stop using twitter.com.
2. I buy those twitter clients. I now control maybe 80% of the twitter client world.
3. I stop using twitter.com API as the backend, and replace it with my own.
4. Twitter.com becomes pretty much moot.
Maybe it's far fetched, maybe it's not...
Alternatively,
1. Wait until 3rd party twitter clients account for a large amount of twitter traffic - say 80%.
2. Do a deal between all the 3rd party twitter clients to stop using twitter, and collaborate on an alternate backend.
which is "a Free and Open Source microblogging platform. It helps people in a community, company or group to exchange short (140 character) messages over the Web. Users can choose which people to "follow" and receive only their friends' or colleagues' status messages. It provides a similar service to sites like Twitter, Jaiku, and Plurk."
I'm surprised no one has taken steps to avoid relying on Twitter.
2. I buy those twitter clients. I now control maybe 80% of the twitter client world.
Give me an example of one person or several people who came together and bought 80% of clients built around a successful API and then controlled that market?
This article just reinforced how hard it is to build brilliant products inside traditional software houses. The thought of going through several rewrites of a back end and front end, prior to release, would be laughed at.
... so I connected to that ads database (I assure you, random engineers can no longer do this!)
Interesting. I guess protecting the infrastructure of a billion dollar business is worth the cost of there being no chance of another billion dollar business being discovered in this way by a random engineer.
It's not really the infrastructure they're worried about, it's their users' trust. Can you imagine the hell there would be if some disgruntled Google employee ran off with the business strategy, clickthrough data, and credit card numbers of every Adwords customer?
I think both Joel and Paul are right. Most of the code Paul talks about writing took a "few hours" to write, what Joel is talking about are massive projects that take weeks of effort only to find out that they solve the wrong problem.
So, rapid prototyping: good, unspecced large projects: bad.
The only thing good about a large project that is specced that still goes wrong is that the developers can feel good about it not being entirely their fault.
In short: do whichever lets you explore the important effects faster. Sometimes a spec will make you faster and sometimes it isn't worth it. You can generalize from these two examples, but the more data points you have the better you will be able to tell when a spec will probably be helpful and when it won't.
The more I work in this field, the more I think that this is the best and quickest way to build good software.
Once you realize that everything you write is disposable, you have freed yourself to just write and judge later.
It's not how fast you get started, it's how fast you finish. Sometimes the long roads around is quicker.