Someone wrote in asking:
you always have ideas… How do you generate ideas to build something?
Which is a great opportunity to pontificate. (I swear, I did not make this question up!)
Let's get this out of the way: I am the wrong person to ask. I am not an effective “idea guy”. I'm white, male, I was born in the USA, I'm 34 years old, and I've been writing software since I was in my teens. If I were any good at ideas, I'd be a millionaire by now.
So you probably shouldn't listen to a word I say. But I'm going to say it anyway, because there's nothing quite so much fun as making up answers to the big questions.
I'm an engineer. I like to solve problems as directly as possible: define the problem, then methodically advance towards a solution. But this doesn't work for having ideas.
Ideas are tricky beasts. You can't just set out to have them. The head-on approach doesn't work. You have to sort of sneak up on them, in a roundabout way, whilst whistling nonchalantly.
The thing about ideas is that they emerge from the unconscious. They assemble themselves while you're not looking and then pop up unexpected. You might not be able to intentionally grow an idea, but you can work on making the soil of your unconscious as fertile as possible.
Ideas usually emerge from as a result of other, smaller ideas meeting up and combining in new ways. So I look at the process of idea cultivation as a bit like being a social coordinator for my unconscious mind. I want to make sure that all the most interesting thoughts are going to all the best parties and drinking lots of bubbly. I want my unconscious thoughts to have plenty of opportunity to bump into each other, get into an engrossing conversation, and then find someplace private to get to know each other better.
Raw material is essential. And the neat thing about it is that it's not as important what the material is so much as how diverse it is.
So I try to have conversations with people. Conferences and meetups are good for this. Unfortunately I'm shy and introverted, making conversation difficult for me. So I try to give talks at conferences, making it more likely that people will spontaneously talk to me.
Pair programming is also a great opportunity to spark ideas off of another person.
I try to read regularly. I prioritize books over blogs, because much of what is written online is a surface-level rehashing of concepts that have been thoroughly explored in books. I read technical books, but more importantly I read nontechnical books. I recently finished Guns, Germs, and Steel, and I'm working my way through Thinking, Fast and Slow. Both are tremendously thought provoking. The first gave me an idea for a roguelike video game centered around tribal survival, and the second gave me an idea for semi-scientific study of bias in perceptions of code. I'm sure these books will indirectly bear much more fruit over the years, as the ideas they introduced me to meet up with other bits of knowledge.
I just gave a well-received talk whose concept came out of a) feeling intimidated by the technical qualifications of the other presenters at a conference; b) being tired of doing “serious” talks; and c) watching copious amounts of MythBusters. Inspiration is everywhere.
I could go on and on about sources of input, because there's really no limit. Start a garden. Learn about artificial intelligence. Take a dance class. Strike up a conversation with a restaurant owner. The important thing about manufacturing serendipity is that you mix things up, keep having new experiences and hearing from new people. It's like the difference between a healthy fish tank and a dead one: in the healthy tank, the water keeps moving.
The other element is giving all that input time and space to percolate and recombine. The unconscious and the conscious minds don't seem to work well in parallel. You have to find ways of distracting the conscious mind for a while.
Toward that end, The most important thing you can do is to get adequate sleep. Beyond that… take lots of walks. I also like to go for long runs. Anything physically engrossing and/or relaxing.
Another thing I've been noticing is that it's not always about having big ideas. It can be about about giving a small, seemingly stupid ideas a chance. Someone just raised $1.5M for an app that lets you say “yo” to your friends. I'm a lousy idea guy because it never in a million years would have occurred to me that such an app could be downloaded more than 5 times.
As a developer I like to pace around building castles in the sky. But if I've had any successful ideas at all, they've mostly come from having an idea and then paring 90% of it away.
And that's about it: fill your mind with rich & diverse knowledge; talk to lots of people; allow your unconscious time & space to do its thing, and see what pops out. I hope this helps someone.
But like I said, at best I'm barely adequate in the idea department. You should probably ask Elon Musk instead.