Sometimes it feels as though software development is a process of enfolding. You start out with a fairly simple system, and then you think “Hey, what if I try to add this cool feature?”
So you build a demo of that feature using your system. But after you get it working, you realize that you want that capability to work everywhere within your system.
So you move it inward. Instead of a demo, it becomes a core capability, implemented in one of your system’s internal libraries.
What’s nice about this transition is that once something has become enfolded — made the transition from demo to core capability — it is then able to work together with all of your system’s other core capabilities. And that’s a lot more fun for everybody.