How making wine made me a better software engineer

I recently passed the marker for my second year as a full time software engineer. Perhaps more interestingly I have also been making home made wines for 2 years! While reflecting on past recipes, mistakes, and fermentation explosions I realised there are some parallels between producing wine and producing code (as tenuously linked as they may be).

The wine

During the second wave of lockdowns in Berlin an artistic need grew inside of me. Unfortunately, I am a horrible painter, my poetry stinks and taking photographs within my apartment didn’t appeal to me. One of the videos I watched, during just one of my lockdown disassociation sessions, was about the making of tepache. After trying the recipe and realising that, what I thought was previously a locked-off world of beverage production, a level of focus and learning could yield such interesting and tasty results.

While tepache had been a good start I had my focus on wine. I am by no means a wine snob, and neither am I a particularly big wine drinker, however setting a goal that was completely out of my grasp and understanding gave me a purpose and a drive. My first wine, ashamedly made from cartons of fruit juice, was a success. The alcohol wasn’t overpowering, people I shared it with described it as a mix between “OK” and “actually tasting like wine”. This was all the motivation I needed.

An important part of the wine making process for me was the focus on including other people. Others had to drink my wine. This was to not only share the joy of producing something drinkable but also to gather earnest feedback. People can tell you that your wine tastes nice but, at the time of drinking, wincing faces and furrowed eyebrows give you more feedback than friends could ever offer.

I began to explore other ingredients for wine. Different yeasts and fruits yielded different, and not necessarily, better results. A wine made of tomatoes isn’t salvaged by the expensive champagne yeast used to ferment it and pears from the bio market are dragged down by bread yeast.

Now I have been making wines, meads, and ciders for the better part of 2 years. The quality has progressed greatly and I have been able to iterate on past mistakes. Wines that are overfermented and act like grenades are now tame and effervescent. Sour and bitter wines are more rounded. I no longer use fruit juice. This iterative process has meant that in the space of 2 years, I have gone from a clueless beginner to, after countless hours, an OK winemaker!

The code

Sadly I can’t write a whole blog post focusing on my love of making wines out of tomatoes so I will begin to draw comparisons with code now.

When I started making wine it was around the time I joined my first company as a software engineer. I remember specifically as a I shared an image in a slack channel holding two large demijohns of “wine”. Thinking back to that time designing REST applications or doing database migrations was an incredibly daunting task. Things like authentication, code reviews, and proper testing seemed not only difficult but sometimes impossible!

Much like the wine I started small and worked on improving. Correcting small mistakes in a database was my tepache. Purely functional albeit a little unexciting. Experimenting with frameworks and approaches became my tomato wine - while technically passing as wine, no one wanted to drink it.

My biggest learning in coding, like with wine, came from listening to feedback. Being told a wine tastes like petrol or a pull request is borderline unreadable is not only disappointing but also a great opportunity for reflection. Going back over a wine recipe and realising that adding twice the needed weight in sugar or, in the case of code, realising that not even you can make sense of the code, means that some self-critique is required. Focusing on not making the same mistake twice became a fundamental part of the iteration process.

While, like wine, I am still relatively new in my software engineering career, it is important to focus on the learning and future ahead. Realising that there are approaches, techniques, recipes, and frameworks that you don’t understand does not mean that they are locked off forever. I didn’t know how to make a wine 2 years ago and I’m sure that 2 years from now there will be aspects of software engineering that I won’t fully understand but I am excited to get there.

A junior engineer and, soon to be, drinker of bad wine.