Creating custom pipes in Angular involves defining a class with the @Pipe decorator and a unique name. This class must implement the transform() method, which takes an input and returns a transformed output. In the template, you use the pipe with the | operator and the pipe's name. Angular calls the transform() method with the input value and uses the returned output to display in the template. For example, a pipe named 'exclaim' adds an exclamation mark to a string. The execution flow starts with Angular finding the pipe in the template, calling transform(), getting the transformed value, and finally displaying it. Variables like the input value and transformed output change during these steps. Understanding when Angular calls transform() and how the template updates helps avoid confusion. If transform() returns the input unchanged, the template shows the original value. This simple pattern lets you create reusable data transformations in your Angular apps.