Throughout my career, I have consistently integrated the processes of designing and programming while creating software. For over a decade, I have practiced designing in code, rarely relying on traditional design tools when developing something new. As a creator, I have found this approach to be highly advantageous, enabling me to design and build products quickly and efficiently.
By simultaneously considering design and implementation, I am able to anticipate the evolution of designs while programming. This has led me to develop a set of tools, instincts, and principles that help maintain a holistic perspective throughout the entire process. Areas prone to more iteration get built more loosely, creating flexibility to iterate and improve, sometimes preserving time and effort. Foundational components at the product's core are built with robustness and stability in mind.
The primary advantage of this approach is the elimination of most of the labor and back-and-forth communication typically associated with creating and editing in design tools. Additionally, incorporating engineering constraints as part of the design thinking process allows for a more accurate translation of imagined designs into tangible, functional products.
However, there are certain downsides to this method, including the need for increased discipline when critically assessing one's thought process and making reliable judgments on the tradeoffs made along the way.
The emergence of titles such as product engineer and design engineer indicates a growing recognition of the value of this skillset in the professional sphere. Combining design and programming skills in software development can result in a more streamlined and iterative process, ultimately yielding superior end products.
This approach is reminiscent of crafts such as carpentry, architecture, and clock-making, where practitioners often seamlessly merge creative and technical aspects of their work. In these fields, the union of art and engineering is generally perceived as a single craft. Similarly, the integration of design and programming in software development should be regarded as the craft of creating software for humans, emphasizing the synergy between the creative and technical aspects of the process.
P.S. – If you want to learn about how I made the WebGL animation at the top: I've shared the shader code on Replit.