A while ago, I found myself spending an unreasonable amount of time adjusting the spacing between lines. Not because something was broken.
Because the lines were doing something interesting. For one of my Creative Coding assignments at NYU, I explored Moiré patterns, those optical effects that appear when repetitive lines or shapes overlap at slightly different angles or frequencies.
The individual layers can look surprisingly ordinary. A series of rings. A set of curves. Repeated geometry. But when you place them together, something changes.
New shapes seem to emerge. Areas become darker, patterns ripple, and parts of the composition appear to move even though nothing is actually moving. That illusion became the most interesting part of the experiment.
Designing with interference.
I built the patterns using p5.js, working with repeated forms, transformations, spacing, rotation, and two-color compositions. The process involved adjusting parameters and observing how relatively small changes altered the overall result. Sometimes a tiny shift in rotation created a completely different visual rhythm. At other times, increasing the complexity simply made everything harder to read.
It was a useful reminder that adding more doesn’t always make something more interesting. Eventually, the experiment moved from the screen to a pen plotter.
That changed things again. On the screen, I could preview and regenerate patterns quickly. With the plotter, I had to think about physical lines, ink colors, layering, and what the machine would actually draw. The artwork wasn’t just an image anymore. It was the result of a sequence of physical actions. There was something satisfying about watching a coded instruction become a line on paper.
The interesting part was never complete control.
I could choose the parameters, but I couldn’t always predict exactly how the final overlap would feel. That tension between control and surprise kept me experimenting. It also reminded me of interaction design in an unexpected way.
When we design interfaces, we’re constantly arranging visual relationships, spacing, contrast, repetition, hierarchy, and movement. The difference is that most interfaces aim to reduce ambiguity, while this experiment deliberately played with perception. I enjoyed working on something where the goal wasn’t to help someone complete a task, but to make them look twice.
What I took away.
Creative coding has become a way for me to explore visual ideas without immediately worrying about conventional interface patterns. Sometimes I start with a question about a behavior or a system. Other times, I start with a shape and see what happens when I change one variable. Both approaches encourage experimentation, but they lead to very different outcomes. And occasionally, the most interesting result is the one I wasn’t trying to make. A small reminder to myself: Not every experiment needs to solve a problem. Some are worth making because they reveal a new one.

