As for artistic expression—there is a myth that regularly circles around suggesting that “anything is possible in game engines that would be possible in your own engine”. This is often propagated by the same people who suggest that writing your own engine is a waste of time. This is simply not the case because of a fundamental truth about abstraction: something that is more abstract exposes fewer capabilities. A system with fewer capabilities implies a system with fewer possible outputs. So unless you believe that anything outside the set of outputs that Unity (or similar) provides is of zero value—a ridiculous belief, demonstrating quite the lack of imagination—then it necessarily trivially follows that, no, not everything you could do in your own engine is “possible in a prebuilt game engine”.

The designer, then, would be most empowered by good programming skills, which offer a unique degree of capability. Similarly, the best programmer—who has unique access to capability—is most empowered by good design skills. Unfortunately, the current computing world is one where people, broadly, choose one or the other. Designers, then, work primarily in tools with a high degree of abstraction, and thus with a much lesser degree of capability.

The computing world, as a result, has found itself in an odd situation—those most able to design are offered the least capable tools, and those who have no business designing have all of the most capable tools. The most compelling, functional, beautiful, thought-provoking, and meaningful work seems to arise when this artificial boundary between design and programming is blurred, and when one person embodies both the designer and the programmer.

How do we eliminate this artificial boundary, then?