Dependência excessiva de macros

Sinto que, toda vez que leio um programa em C ou C ++, metade ou mais são apenas macros. Entendo que as macros podem ser legais, mas são difíceis de rastrear, depurar, etc. Sem mencionar que a maioria das linguagens de programação nem sequer define algo como macros (embora o Perl6 tenha algo desse tipo).

Pessoalmente, sempre achei uma maneira de escrever meu código sem usar macros, seja com modelos, herança múltipla etc. Até senti que não sou um bom programador, porque todos os profissionais usam macros e tento evitá-los tanto. Como eu posso.

A questão é: existem problemas que não podem ser resolvidos sem macros? As macros são, em última análise, uma boa / má prática? Quando devo considerar o uso de uma macro?