(I’ve recently twitted two examples, but I think it the idea deserves a more general blog post, so here we go.)

It’s not enough to be an outstanding developer to be able to create great software (that sells). You need to also be:

good at defining the problem(s) that are to be solved – so that you don’t develop something that’s not needed;

good at selecting the correct technical architecture for your code – to ensure everything will eventually work great at runtime;

but also exceptional at designing for the real end user – so people get actually in love with your app(s) and are captured under your ecosystem for the long term (and if things go viral you won’t even need to pay for ads to sell your creation at large!)

While for an experienced engineer the first two roles are easier to combine (although not always the best thing to do), in my opinion the third one should better be delegated to somebody else who doesn’t do hands-on development himself or herself.

Because (I think) most people are either technical or functional oriented, and technical persons rarely come up with outstanding functional ideas (like, for example, those features that I’ve recently twitted about.)