It's odd, I've always admired, and been scared of, lisp. It's one of those languages that everyone always talks about emotionally. There are the zealots, preaching macros and homoiconic data / code representation, and there are the rest who pick on it's parenthetically obtuse nature.
I think I am starting to understand why Lisp's macro system is such a big thing. The amusing thing is that I'm not using Lisp to do it - I'm using a code generator to write a code generator from a hand designed data language that looks suspiciously like JSON. But it's a tad more prescriptive than JSON. Honest.
I'm finally getting the religion on capturing requirements in computable format. Clients always change one of two things - the original spec, or how they want the whole product to look. The first requires only that the requirements be updated, while the later requires that the generator be updated. In neither case is a bulk change to the whole code base required.
Finally, the project implementation can be correctly factored. I like it, a lot.