Diary of a Failed Startup
diffle-history.blogspot.com
diffle-history.blogspot.com
I, for one, think this is good advice for code in general. At least "at first, solve a problem, not a class of problems".
I have noticed that if I write my code too general at first, it ends up solving one class of problems kinda poorly, and ends up being re-written. If I write it for the specific problem I need to solve, and then generalize it to include another similar problem when I need to (and continue this process), I end up with very solid generalized code that solves a specific class of problems very (IMO) elegantly. It still gets re-written, but in a small-chunk iterative fashion.
This, of course, may be because of the way I think - or it may be due to me being relatively "young" as a developer. I am slowly generating more general purpose code that is getting reused for similar problems in different applications, however I write much more code for specific problems than I re-use.
Perhaps someone who's been doing serious coding work for more than a few years would like to weigh in on this?
Take a look at any piece of software you consider great, and you'll see that at version 1, it did very little, but did it well.
Conversely, take a look at something like Lotus notes, and you'll see that the opposite is true.
Consider yourself lucky to have discovered this idiom so early in your career!
I would also say we probably fell in love a bit too much with our first idea, and probably held onto it too long.
Oh, and think (1) low cost, (2) sustainable, and (3) ability to monetize. We had #1 and #2 down pretty well, but had absolutely no real concept of how this thing could possibly make money. Most startups are NOT going to get taken over, so unless you are in it for non-$$$ reasons, it is probably a good idea to at least come up with some way you can profit if you manage to attract an audience but not a buyer.
Subversion commit rate is an abysmal measure of work speed.
The nice thing about svn commits is that if you're doing atomic commits (and both organizations were, though I got a little sloppy about it with GameClay), 1 commit ~= 1 feature. There're still issues about what you consider a feature - if you do a feature right the first time and then check it in, is that better than if you check in a barely-working rough cut, then a couple UI enhancements, then some bugfixes for things you should've gotten right the first time? But those issues would crop up no matter how you try to measure forward progress.
Joy.
In theory all of our commits are approximately one feature, and I can't, for the life of me, imagine finishing 100 features in 2 days (even split between all three of my team). Clearly there's some disconnect between what different people consider to be a feature.
For the record, we've made a little over 1000 commits in the last five and a half months. I certainly don't think that makes us 20 times less productive.
It bothers me when developers aren't working on hard problems and fail to make frequent commits. They are used to working in isolation and without scrutiny. Unless people are actively breaking things they should be updating.
Something to ask about your company: are you going out to find customers, or are they coming to you? If it's the latter, congratulations; you've succeeded where thousands of entrepreneurs have failed. But if you have to make lots of sales calls to close that one sale, it doesn't necessarily mean anything, even if you're profitable. Try enough prospects and one is bound to say yes, if only because they have money to burn and want to see if you can help them out. That was a lesson learned at my last employer, which was profitable before I joined but got no new business while I was there, because their revenue came from customers that didn't really use the product and just bought it because a couple million is a drop in the bucket when you manage a few billion in capital.
go bug!
The only plausible counter-example I can think of off-hand is .NET. But even there, it started out not as a new from-scratch platform, but basically as a clone of Java with some windows-specific bits thrown in. So maybe a billion is enough if you're just trying to compete, not innovate.
I completely agree with this. Paypal would not have got it right if they didn't start with encryption technology or Microsoft with some kind of software.
You may miss the exact product initially but it has to be the right direction.
I'm going on vacation in about 10 minutes, so I'm not going to see the rest of the discussion. If folks find other articles on the blog interesting, feel free to submit them; I have more than enough karma already.
It must take a lot of personal strength to put your failures out there for others to learn from. Thank you.
It's very, very difficult to wear both the developer and the evangelist hats at the same time: being a developer requires that you be very pessimistic, so you can see and fix all the problems in your design, while being an evangelist requires that you be very optimistic, so others can feed off your passion.
pg has mentioned many times that a startup is very difficult for a single founder. If I remember correctly, he says that because it's too much work for one person.
This is a slightly different angle that I had never really thought about. In effect, you'd have to be "Sybil" with multiple personality disorder to pull it off.
I tend to think of myself as a "very optimistic developer". I doubt I'd even try what I'm doing if I wasn't. Does this mean I may miss major design defects because of my rose colored glasses?
Great post.
Huh?
Even better, a video of Linus Torvalds speaking on the history of Linux at the Computer Museum in 2001: