This is extremely validating to read. How many times have I battled with DRYists over which solution is &quot;better.&quot;<p>I&#x27;ve happened upon the pattern of code growth described here after years of encountering and resolving pain points in code, often as the maintainer.  DRYness for DRYness sake might feel satisfying when writing the code, but when changes need to be made, it often scatters constraints and requirements throughout the codebase, making any change an unestimatable mess of sneaky traps. Try writing your boilerplate initialization code straight some time... no metaprogramming, no helper functions, just get your configuration, create your objects and wire them together. It is oddly liberating to have your bootstrap code flat and unmagical.