Choose Boring Technology
Every time I spin up a new project, I try to answer the following question honestly:<p><pre><code>    "Am I using this project as an excuse to learn
    some new technology, or am I trying to solve a problem?"
</code></pre>
Trying to learn some new technology? Awesome, I get to use <i>one</i> new thing. Since I already understand every other variable in my stack, I'll have a much easier time pinning down those 'unknown unknown' issues that invariably crop up over time.<p>Trying to solve a problem? I'm going to use what I already know. For web stuff, this'll be a super-boring, totally standard Rails web app that generates <i>HTML</i> (ugh, right? How <i>last century</i>), or maybe a JSON API if I'm trying to consume its output in a native app. For mobile stuff, this'll be an Objective-C iOS app.<p>Waffling about it and saying 'well, I am trying to solve a problem, and I think maybe a new whiz-bang technology is the best way to do it' is the simplest path to failing miserably. I've watched incredibly well-funded startups with smart people fail miserably at delivering a solution on-time because an engineer was able to convince the powers that be that a buzzword-laden architecture was the way to go.<p>You don't know what the 'right' solution is unless you understand the tools and technology you'll use to deliver that solution. Anything else is just cargo-culting.