Eles soam muito diferentes para mim, e eu tive dificuldade em dizer qual é o mais importante.
Você pode ser um mantenedor de software incrível, mas um programador muito ruim. Algumas pessoas são incríveis em depurar código, encontrar o caminho, corrigi-lo e melhorá-lo levemente. Eles são frequentemente comparados aos zeladores, mas é um desserviço: eles podem ter conhecimento e know-how verdadeiros para melhorar as coisas.
Mas eles ainda podem ser terrivelmente ruins ao escrever um novo código e ao projetar e implementar algoritmos. Eles podem entender por que as coisas geralmente são melhores, de um jeito ou de outro, e podem até entender, depois do fato, os benefícios de um projeto em detrimento de outro. Mas eles têm dificuldade em encontrar um deles. Eles não têm uma compreensão profunda dessa mentalidade lógica e de resolução de problemas.
Ambos são importantes em minha mente. Você não quer apenas hackers que possam encontrar soluções incríveis, mas produza um código inatingível para as próximas gerações de globos oculares que olharão para sua base de código. Pode ser bom para projetos de prototipagem e de curta duração, mas em uma escala maior que só pode voar por tanto tempo.
Portanto, o primeiro grupo também é essencial. Mas eles não seriam capazes de projetar ótimos softwares com o segundo grupo. É bastante simbiótico (e é melhor quando as qualidades realmente estão no mesmo desenvolvedor). Eu acho que se você vê isso como um problema de galinha e ovo, eu tenho que admitir que o tipo lógico importa um pouco mais, por razões históricas, pois elas precisavam existir primeiro para avançar. Mas isso significa que eles são mais importantes em uma loja de software? Acho que não. Você pode produzir softwares excelentes e bem-sucedidos encanando coisas e não inventando muito.