I’ve come to realise that the only attribute that sets good software engineers apart from the rest is persistence. The ability to be focused for long period of times is known to be crucial for knowledge workers, and developers are no exception to this. But, just declaring a correlation between good performance and deep focus is not enough: it is also crucial to understand that focusing is an essential ingredient to excellence by means of persistence.
Although an embarrassing amount of films portrait hackers as nerds that furiously stamp their keyboards with their fingers, the reality is much more mundane: a good software engineer spends most of his time debugging his own code, cleaning up and refactoring. All in all, maintenance trumps innovation in most software endeavours.
If we understand that, then the next step is trivial: a great developer is one that is good as maintaining his or her own code. A strong emphasis on being able to debug swiftly and efficiently is ingrained in books such as Uncle Bob’s Clean Code, because we as developers are always trying to be too clever, whereas great ones are usually too humble and double check their own work constantly.
Persistence is, then, key: how would anyone keep a level of concentration on such mundane tasks, reviewing his own code, looking at error messages, trying to understand the underlying problem and, all in all, systematically hypothesising about expected and unexpected behaviour of the code on the compiler, if one does not have the skill to not give up?