Software developers are frequently required to address evolving stakeholder concerns, which often result in changes to the source code of an application. Manually performing invasive modifications across a large code base can be tedious, time consuming, and error prone. Metaprogramming techniques assist a developer in specifying the changes needed to an application in a manner that does not require manual adaptation of source files. Various forms of metaprogramming exist, including compile-time metaobjects, load-time structural reflection, and aspect-oriented programming. In this paper, a profiler is implemented as a common case study using three different approaches to demonstrate the various mechanisms and benefits offered by metaprogramming.