Someone asked me recently why should anyone hire great programmers and why good software takes time to build. Here's my answer.
(Disclaimer: It may sound like I advocate only hiring college grads. I do not. Just good people.)
Twitter does the simplest thing possible, yet they hire CompSci graduates from Yale and Stanford. But why? All they do is show a 140 character message!
The reason why is because when you start to explore relationships between data - who follows who, how someone's post triggers other posts or new friendship requests - you get into classical computer science problems, which require mathematics to understand and computer science knowledge to be able to solve.
When those problems are small scale, like 10 users, anyone can write that software, because they don't have to respect computer science and math behind those problems. When those problems are scaled to hundreds of millions of people - or interactions - you need to know graph theory, searching and sorting algorithms, understand control theory, genetic algorithms and operating system design - the list goes on.
Then there is the actual craft of software engineering - patterns, right algorithm choice for specific situations, code reuse, Bugzilla VS Jira. Sometimes mergesort really is the answer, and PHP is a better choice than Erlang. Sometimes not. These decisions can only be made through experience, and cannot really be learned.
Also, every software we use - a database or an operating system on a web server, or a programming language - will always take years to master, and since they always change, you can either keep up and keep your mastery or slide off the edge into obscurity.
You want creativity - people who can push the envelope and even improve existing theories and practices since they face unique challenges.
You want awareness - people who understand a complex system but also understand the reason for the complexity.
You want passion - which isn't just coding on your own beyond 9-5. Its more important to truly enjoy this 9-5 you are putting in for *me* than to just wait so you can get out from the office and go work on your own video game, and have me simply pay for your rent and pizza.
You want top people writing your software because thats what Facebook, Twitter, Google, JP Morgan and NASA do, and those people develop top products, which change the world.
And when you finally get the right people, you need to understand that no matter what you just put up on that whiteboard for the next release cycle, chances are you will change everything 2 cycles from now. Because realized ideas and resulting data feed each other that same essence of evolution that drives our species forward.