350 karma · joined September 6, 2007
Anyone that's built a startup has done that initial back and forth with the first customers. It's done with surveys and one-off emails and shared google docs. It's a mess.
We've looked at these processes, and we're building these features into Ramen (in "The Kitchen") that help founders collaborate with their early customers while the MVP is being built. That's the value we're creating.
I was also surprised that it didn't really address the question of whether or not you (37S, dhh) are "stewing in their own witty ideas, listening only to the adoring comments they get from the groupies"
Do you have any thoughts on the "bubble-ness" of Chicago. Think it's a totally invalid point?
Yup. I dropped the ball on this one. Should have a list of 4 reasons. :)
db.users.find({'events.invites.email': 'sv123@gmail.com'})
and that would return all the users that had invited you to an event.
Now, like I said you're testing my example. When these kinds of requirements are taken into account, you'd probably want to have a separate collection for events. Then you could do:
db.events.find({'invites.email': 'sv123@gmail.com'})
In this case, the events in the user document are events that the user is HOSTING.
There would be another object in our data model to represent the people that got invites to the event. These 'recipients' could be another collection or a list embedded inside each event object.
Storing event_ids as an array in the events field defeats the whole purpose of organizing your data into rich documents.
In real life, you very well could build something where the events info was built straight into the user record.
I probably should have thought out the example a little more. We don't ever actually write that kind of query against our production database @Punchbowl. We have a data warehouse pull out high level stats every night, and we query that.
WRT aggregations, you're right -- they do require a bit of acclimation. Once you write a few, though, you're good to go.
$ git push master heroku
is a lot cheaper then:
Setup a machine. Then setup mysql, nginx, REE 1.8.6, or did you go with MRI 1.9.1? You're not gonna launch on Rails3 right? Because then you can't do 1.9.1, you have to go to 1.9.2. And you know how to setup nginx to pipe requests through to a Rails app. Are you going with Passenger or Unicorn? Oh make sure to bring up another machine to act as a MySQL slave. You know how to do that right? And you're dumping your DB to disk and backing up to S3 regularly right. Just write a simple script/cron job to handle that. And when you setup your machines you made sure to setup 2 so that if one goes down, the other will still be around, and you setup a load balancer that will realize when one of those machines goes down right?
etc.... :)
If I were your client I could see getting fairly annoyed at this. Is/was your client pissed that you spent (wasted) time building something from scratch when you could have just used something open source? Or were there legitimate reasons in this case to build something from scratch?