Whenever I begin writing a new Web Application I get all freaked out about choosing my development stack. What database? What language? How should I design my API? Will I need to make it performant? All this incredible amount of bullshit that doesn't really matter at the end of the day, all that matters is the final product and the user experience, and I really want to concentrate on that instead of the technicalities.
Don't get me wrong. I love talking technology. Trying to figure out what things will make my life easier in the long run is a really interesting topic, but it's also very subjective. It's hard to predict what's going to happen to your app 2 or 3 months after you developed it. Users might have different needs and you might end up having to re-think your system. Plus technology changes so rapidly that you'll eventually end up with something that is outdated.
So I decided to not worry about the future. I decided to develop apps using technologies that will make my life as simple as possible, today. Basically I try to avoid anything that gets in the way of me working on the user experience.
Here's a great quote from Bret Victor about how important User Interface is:
Don't get me wrong. I love talking technology. Trying to figure out what things will make my life easier in the long run is a really interesting topic, but it's also very subjective. It's hard to predict what's going to happen to your app 2 or 3 months after you developed it. Users might have different needs and you might end up having to re-think your system. Plus technology changes so rapidly that you'll eventually end up with something that is outdated.
So I decided to not worry about the future. I decided to develop apps using technologies that will make my life as simple as possible, today. Basically I try to avoid anything that gets in the way of me working on the user experience.
Here's a great quote from Bret Victor about how important User Interface is:
Interface matters to me more than anything else, and it always has. I just never realized that. I've spent a lot of time over the years desperately trying to think of a "thing" to change the world. I now know why the search was fruitless -- things don't change the world. People change the world by using things. The focus must be on the "using", not the "thing". Now that I'm looking through the right end of the binoculars, I can see a lot more clearly, and there are projects and possibilities that genuinely interest me deeply.
What stack should you use?
This is surely the million dollar question. Essentially I think that you should use whatever you feel most comfortable with. For example, I like working with JSON - I find it to be a perfect data structure for representing data and I can easily interact with it using any language - so I'll try and use a database that supports JSON (CouchDB or MongoDB). I also like very much JavaScript, and since we still can't program computers using other senses such as our voice or vision, we must use a programming language, so I choose JS as it allows me to work with JSON in a very straightforward way.
There you go. Find reasons why you should use certain technologies compared to others. Even if it's simply because you like Ruby better than PHP - it really doesn't matter, just be smart.
Use the Cloud!
The Cloud has made it even easier for us to abstract the technicalities from our development. It's amazing how you can essentially feed into the power of complicated and powerful databases (such as Google's BigQuery) through a simple REST call. This is a cheap and smart solution for storing your data.
Also, why buy an entire Amazon server that you basically have to maintain, when you could easily use services independently. Need search? Amazon Search! Need a Database? Google BigQuery. Need a Web Server? IrisCouch. This allows you to rapidly build your interface and rely on these cloud services for specific functionalities, without being bothered with tedious technology decisions.