About your 3 points: I agree that having these in one person is a good combination. However people are rarely exceptional in all 3 points. Some guys are exceptional algorithmizers, others have really good intuition for enginering, creating an amazing design (for code), yet others have exceptional memory so that they can dive into huge bloated shitty code, and yet others deal well with monotony (when you have to do unchallanging tasks, or deal with other people's shitty code). Some people are fast like hell, others can grow beautiful thoughts if you give them days to think about a problem. But I agree that a bit of all of this is needed mostly. Also being strong in one territory you can emulate other strengths. If the tasks are not on your limit, you can emulate fastness with smartness, and emulate smartness with being fast. But when the problems are hard enough that you are at your 'limit', this emulation no longer works.