Saturday, September 29, 2007

False Starts

Got a FaceBook message from Bryan asking about incorporation tips and my "first full week away from work". Has it really been that short? Actually, I think it's been two full weeks (9/11 - 9/29) and his math is just wrong. But I certainly remember the feeling of time passing really quickly at work - I remember thinking on several occasions "Geez, it's been a month? I thought it was only like a week".

Since last Monday, I've gotten MogileFS working, experimented with the Python API, installed Pylons, and written about 3-4 simple Pylons apps. Have a decent handle on Routes, Pylons, configuration, packaging now. I hope.

I guess it looks like we'll be redoing the web end now after all; basically, I want a simple blank canvas upon which to build our demos. Seemed easier than trying to integrate it in with the existing Diffle.com site.

I was thinking recently about all the false starts we've had and things we've had to redo, either partially or totally:
  • I started with web.py's DB module but ended up ditching it for one I wrote myself
  • I started with web.py's Cheetah integration, ditched it for standalone Cheetah templates, and then ditched them for Mako
  • I spent significant amounts of time learning about internationalization and HTTP testing for Python, neither of which we really used
  • We did RejectedByYC.com, which we repositioned as Bootstrapacitor, which never went anywhere.
  • We launched as a regular Flash games site which never got significant adoption. The logic behind that was that we'd need those features anyway, but I'm not sure now that we do, and I think we're better off launching with only our core value proposition (the game creation engine) and adding back social features as we need them.
  • Initially we were going to use Ming for the Flash compiler; Mike found MTASC and Swfmill and we went with those instead.
  • I almost completely rewrote Mike's initial MTASC prototypes to fit with our general architecture.
  • We started using Prototype.js for our JavaScript library, which was replaced by YUI, which was replaced by Mootools, which was replaced by JQuery.
I know that in every successful startup, there's a large amount of experimentation and failure that goes on before you eventually find your footing. But I worry that we may be doing too much experimentation and failure, and if some of these failures were really necessary. I mean, our reasoning sounded logical at the time, but in hindsight some of these (like RejectedByYC/Bootstrapacitor/FlashGames!Diffle) were really kinda dumb.

Eventually I'll just have to dive in, fully, and whip something up. And I think we're close to the point I can do that, but not there yet. It's like I'm still pussyfooting around the edge of the product and not quite ready to make it a reality yet.

Monday, September 24, 2007

Catalog of Mistakes

8 hours later, I've got both JavaScript and Flash versions compiling from a single source, and am working on installing MogileFS for the full architecture. Never did get to the YC app, though.

Time for a quick catalog of mistakes we've made since we started. I'll add to these as we make more, and then perhaps publish the whole thing once we've overcome them all and actually have an audience. [edit: didn't actually add more, that's what the postmortem is for, but I've added little edits with commentary]

Personnel:
  • Founder on a student visa. Xin had to leave because his visa wouldn't let him work on a startup.
  • Too many uncommitted founders. We started with 5 founders, with a wide degree of commitment between them. It doesn't work - communication overhead eats up any added manpower they provide.
  • Quitting the day job too late. Now that I know the difference in productivity, I definitely would not have stuck with the day job this long. Then again, my opinion may change if we fail or come close to running out of money. [edit: nope, still feel the same way.]
Technology:
  • web.py. It's just too poorly-supported and unpolished at this point, with some design decisions that are just dumb. Will replace with Pylons, probably, but it's a low priority. [edit: and then Django]
  • Cheetah. Mako is better. [edit: and Django is...I dunno about better, but I like the Django + Django package more than Pylons + Mako]
  • Prototype/YUI/Mootools. Ditched all of them in favor of JQuery.
  • Writing too much from scratch. If I had to do it over again, I'd probably use Pylons or Django. Then again, writing from scratch probably gave me new perspectives on how to use the framework features, so it may be unavoidable.
Strategy/Positioning:
  • Too many side projects. A couple times, I suggested doing a side project "on the off chance" it succeeds. Problem is, if the passion isn't there for the idea, you won't be able to follow-up enough to see whether it'll really succeed. We'd be better off pushing through on our main idea and doing our best to make it succeed. If it fails, *then* is the time for side projects. [edit: OTOH, many of the other opportunities that I'm pursuing came from side projects I did instead of GameClay.]
  • RejectedByYC.com. Yeah, we found out that putting "rejected by" in the name of anything isn't a good way to get users. And the replacement "Bootstrapacitor" was too vague.
  • Diffle the Flash games site - if there are hundreds of competitors already, nobody is going to pay attention to the hundred-and-1st.
  • Not explaining what the site is about - it's not always obvious to other people.
Legal:
  • The attempt to get an IP release and protect us from claims that we developed software while employed by someone else failed. Employer wouldn't sign it. It may be moot anyway, since it looks like we'll end up rewriting nearly everything by the time we actually re-launch.

Will add to these as more come up. Time for the Heroes season premiere now...

A week and a half of freedom

It's now been a week and a half, nearly two weeks, since I quit the day job. And so far, it's appeared that that was exactly the right thing to do.

It's not really the time issue. I estimate that I work maybe 8-9ish hours a day of actual productive time on Diffle, broken into 3 hours or so when I first wake up, another 2 hours or so before dinner, and then 3-4 hours at night. I certainly couldn't do that with a day job, but it's only a factor of two or so more than I could manage in my spare time, and my productivity is way more than a factor of two higher.

Rather, it's what it does to my attention span. Before, those 4 hours a day were broken into 45 minutes or so before work, 45 minutes before dinner, and maybe two hours after dinner when I'm all tired out. By the time I actually get into the work, the amount of usable time is really more like zero. So essentially all useful work was done on weekends.

Also, I find that I'm thinking much more clearly. I'd stumbled around for about 2 months as to an overall architecture for game editor + JavaScript version + Flash version. It came to me about 2 days after quitting my day job. My code is cleaner and nicely factored. Mike remarked at how simple and intuitive the hangman prototype I put together is.

Anyway, a quick list of things I've done since quitting:
  • jQuery documentation & dependency tool
  • YC News in polar coordinates - the cloudmaps stuff didn't really work right (despite spending a few days on it), so I replaced it with a simple polar plot during DevHouseBoston. Was generally a success; did most of it during the hackathon, cleaned it up and added a couple other features in the two days afterwards, and posted it on news.YC. Will include in our YC app as a cool hack.
  • Hangman prototype - it took about 2-3 days to get up-to-speed with MTASC, Swfmill, and ActionScript. I've got a basic fluency now, along with a prototype. Converting it to JavaScript took only a couple hours, and now I'm working on a compiler to generate both from the same source.
Also thought out a distributed architecture for storing games and such.

Am about to start working on the YC app. Mike did a draft last week, now we have to condense things down, since it's too wordy.

Also should start a post with a list of all the mistakes we've made. There's a tendency to white-wash the past, so might as well get them all down while they're fresh and painful. Might be interesting, and hopefully we can avoid making them again.

Tuesday, September 11, 2007

Last day

Has it really been 5 weeks since last update? A quick catalog of what's happened since then.

It's so weird to look back on the last post and see "YUI toolkit". We ditched YUI for Mootools, mostly because the Windoo extensions had a resize handle implementation that we could use off-the-shelf. And then we ditched Mootools for jQuery because apparently the Mootools community is a bunch of arrogant pricks (heard secondhand, but heard from many people) and jQuery is where the momentum is now. Of course, jQuery doesn't have a resize handle plugin (or many of the things in Mootools or YUI really, though it's getting better fast), so I had to write one myself. That took like a week.

We've now got a pretty good library of jQuery stuff - 3 plugins and a documenter/dependency analyzer, which I hope to release as open-source.

I sometimes worry if we're wasting too much time on ancillary tools and not spending enough on the core product. Really, a majority of the time has been spent on tools, server setup, prototypes, learning other tools, etc. And this has been convenient in some regards (one-click deployment, w00t), but I can't help wondering what the state of the product would be if the time had been invested in it instead. And now I'm doing a little widget for DevHouseBoston3 that isn't really related to the product but which might give us a better chance of being accepted to yCombinator. I feel like I really just need to devote a big solid block of time to just pushing stuff out and get it done.

Speaking of which, today was my last day at my day job. It's kinda bittersweet, I guess - these important life transitions always are. But I really can't do both that and the startup, and I'm not willing to let the startup go. Now I'm free to work crazy hours and hack crazy stuff. Liberating, but a little scary.

The IP release was a big bust. My employer wouldn't sign it, so the approx. $1K it cost and 5 weeks it took is basically down the drain. Well, technically the cost isn't, since my pay for those 5 weeks is more than it cost. But the time hurts. I hope that it doesn't cost us our market opportunity.

Moreover, it made my boss think that we had something nefarious going on. (How could he not have heard of similar agreements? Steve Wozniak had one!) I guess no good deed goes unpunished.

Anyway, it's all behind us. Tomorrow - or maybe even tonight, depending on if I can get the cloudmaps for DevHouseBoston done tonight - I get to really put in some time on the game creation engine. It's exciting.