Experimentation, for a lot of us, is second nature. I look back fondly to growing up building wacky designs with my LEGOs, my first time wearing goggles in elementary school science class, and trying out Next.js for the first time so I could learn something other than .NET. It's a lifelong calling in a way. I think it boils down to curiosity and application.
Experimentation has been a strong throughline in my career as a software engineer thus far and I've been fortunate enough to work in organizations and under managers who have helped to foster both the desire and habit of experimenting. I think this helps everyone. As a professional, experimentation always leaves me with some new perspective or improved mental framework on top of the raw knowledge gained. Over time, this translates into better judgment, fewer blind spots, and a stronger ability to reason about unfamiliar problems when they show up in real work. Experimentation allows us to keep our skills fresh in a more applied way than simple education. For example, I may learn much more from building an internal tool with Go, a language I've never used, than I would through a course on Go. A course teaches you the syntax, but building an internal tool teaches you where the language actually breaks. We can extrapolate this to solution or product level curiosity as well. Having experienced building a particular service or feature gives you a lot for the next time around.
In my opinion, education and experience are two sides of the same coin. One provides vocabulary and structure, the other gives it meaning under real constraints.
This also builds confidence which, in my opinion, is a core trait to refine not only for software engineers in particular but just as humans in general. Being confident allows us to act with less doubt. I've found that the more varied experiences I have, the more confident I become broadly as well as specifically to the core skills I already had. There's a lot to be said about breadth of knowledge but as it relates to experimentation and confidence, it really helps teach you to know what you don't know. In that sense, experimentation is less about collecting knowledge and more about developing the awareness and confidence to navigate uncertainty when it inevitably appears.
Given all this, a concrete example of some recent experimentation that I am proud of is through my project Vigil. There were two angles I wanted to explore: how monitoring apps work, and how Cloudflare's Durable Objects operate in practice. As it turns out they are both great especially together. Durable Objects are essentially Cloudflare Workers with state, paired with fine-grained cron-style triggers called Alarms. The experiment came together as an edge-native, open source website monitoring solution that anyone can deploy and use to monitor their sites.
You can learn more about Vigil or anything else I've been experimenting with on my projects page. I will continue trying new things out and sharing what I learn here on this blog. In the meantime, happy experimenting.