Cooking requires confident guesswork and improvisation — experimentation and substitution, dealing with failure and uncertainty in a creative way.
Experimenting, learning, and growing are all things we do as software developers.
We’re constantly learning and leveling up our skills, whether it’s a new language, framework, or tool. Experimenting and iteration are core elements of this practice and are not far from the skills needed to be a great cook.
We experiment with new ingredients, tools, techniques, and even cuisines in the kitchen. The same is true for development. There are frameworks and languages we could learn, mobile app development, game dev, design systems; the list is never-ending. The only way for us to grow is to experiment, and we can do this with software by finding a project we like to build and using that as our base to test out new techniques.
We shouldn’t be afraid of failure; we have no way of knowing what will and won’t work without experiencing it for ourselves.
Not all dishes are winners, and neither will all of your pull requests.
Or it is such a catastrophe that there are plenty of warnings, but either way, someone had to experience that failure for others to learn.
Then there are the times you make an absolute banger of a dish, you’re in the zone, and it tastes so damn good! The same thing can happen with your code, but the only way to know when it’s great is to get that experience in the kitchen. Play, experiment, and figure out what works and doesn’t. Build something for the hell of it if you want to, don’t feel that it needs to be business-related or some other person’s definition of practical. Just have fun with it, and if it doesn’t work out, learn from it.