Being the occasional software developer myself, I tend to browse around the net for news on programming and general advice for people who are doing their own projects. Several months back a friend brought my attention to a website called ycombinator, which is essentially a company that funds startup companies (and a must-know if you're thinking of going that direction). It also has a news feed, which not only contains technical articles on software development, but also a lot of motivational articles, success stories and entrepreneurial anecdotes.
Something that bothers me (and the reason I am writing this post) about most of the articles I've read is that they describe the road to success as something that can only be approached from a very positive point of view. As I have not accomplished anything myself yet I realize that my words carry no weight, but I still feel like commenting on this as it seems like the 'startup culture' is starting to rely on a fixed formula for success. The formula for startup success is generally: lots of hard work and dedication, secret ingredient X which depends on the author of the article and his previous experiences (there's generally little or no correlation between different people's secret ingredients), and last but not least: thinking lots of happy thoughts.
And there's been plenty of success stories that relied on this, the most famous anecdote being that of Steve Jobs' reality distortion field, but there's about an example a day of this on ycombinator. What concerns me is just the general impression I get from people, that nothing bad will happen to you if you just ignore it or pretend it's not important. I good example of this is the latest new thing in devland: NoSQL databases. Rather than storing your data in the old-fashioned way, with tables and rows, now you can store objects or documents directly, using a growing variety of software that doesn't function like a traditional database. While I'm a big fan of finding smart solutions to the object-vs-table problem, I do think a lot of developers are just happily thinking happy thoughts and avoiding complex (but more realistic) solutions like creating a proper relational database design. Instead they take the easy way out and use a NoSQL solution instead without properly considering whether it's the right tool for their purposes, or if perhaps a traditional solution is better. I am by no means saying that NoSQL is bad (CouchDB is pretty awesome), just that we shouldn't be blinded by all the (fake?) happiness and hype radiated by those who are promoting NoSQL products. Above all, be practical.
I've been wondering if it's a bit of a culture class happening here. Two stereotypes that come to mind are the hopelessly optimistic self-help guru from the US (like Tom Cruise in Magnolia) versus the bitter cynical bastard from the UK. Imagine they were both programmers who were forced to work together. I'm mentioning this because I've recently done a small project (well, it's not finished yet) with a guy from the US, and we quickly settled into the guru/bastard roles, with me being the bastard. I have to say that the combination worked great, but had it been two gurus or two bastards then things would have gone to hell very quickly. The bastard needs the guru to keep him motivated, and the guru needs the bastard to keep him grounded and point out things that the guru would have glossed over. Having a counterpoint to yourself is in fact a very good reason of why you shouldn't do the whole development cycle yourself. You'll end up becoming schizophrenic (just like us).
When I started writing this post my main goal was to point out that the online trend of thinking happy thoughts to become a successful developer/entrepreneur is starting to grow a bit out of hand. Being a problem-pointer-outer person myself, I tend to encounter a lot of people who are trying to counter my personality by being extra positive. Sometimes this frustrates me and I wonder how they can be so positive even though they cannot see the obvious flaws in their [idea,design,source code,business plan]. In the end though, the really good developers know when to get realistic about their products, no matter if their core personality is generally optimistic or pessimistic. When the time is right they'll discover their flaws and fix them when it's appropriate. The only time when the guru/bastard split is more important is at the start of a project. When starting from scratch, optimists might neglect the finer details a bit too much, but the pessimists won't ever get out of the planning stage because they worry too much about the possible problems they might face.
Self-help guru or cynical bastard, whichever you are, it's important to find someone who balances out those traits, especially if you're involved in the very start of a product or a company. And perhaps, if it's not too much to ask, the cynics might fare better if they were just a little bit more positive, and the optimists could accept just a small dose of reality. Then all that remains is a lot of hard work and a bit of your secret ingredient.