Brewing Software Coffee powers our best software decisions.
Building great software and brewing great coffee go hand in hand.
There's nothing like sipping a good cup of coffee while pondering ways to fix a hard bug or evolve an architecture.
It works so well that it has become one of my best-known practices, the perfect balance between a full-blown design review and brewing coffee with friends.
Over time, I've grown to appreciate all the nuances of brewing good coffee and building great software. They are very similar.
Coffee and Software Engineering
Precision & Attention to detail
Consistently brewing a perfect cup of coffee requires selecting the ideal beans for the method, measuring the right amount of coffee and water, and brewing at the right temperature.
Similarly, building great software requires paying attention to the little details, choosing the right tools, understanding the nuance of distributed systems, and ensuring everything works correctly.
Coffee Time: James Hoffmann's V60 Ultimate Technique
Brew time: 3min 30s
Ratio: 1:16.6 - 30g for 500g (~2 cups)
- Rise the filter and pre-heat the v60
- Add 30g of coffee and create a small well in the middle of the grounds
- Add 60g of water for blooming
- Swirl in a circular motion making sure the water and coffee are evenly mixed together
- Let it rest for 45s
- For the next 30s, Pour 300g of water (60% of total)
- In the next 30s, Complete the second pour the rest of the water
- Stir with a spoon clockwise and then counter clockwise
- Give it a final swirl to keep the coffee bed flat
- Wait for the extraction to finish for another. It should be done around the 3min 30s mark
Enjoy a perfect cup of coffee! ☕️
A Process and Ritual
Brewing a fine cup of coffee requires following a balanced process that changes slightly depending on the brewing method. Different people like different methods, and with time everyone gets to the one that matches their taste and creates their very own ritual around it.
Software Engineering requires following a process. There are different approaches and practices that the industry follows. Small teams prefer simpler practices, and big companies prefer more structured approaches to managing the software delivery life cycle at scale. They tend to pick one that matches their culture and strategy.
Building software to find product-market fit is completely different than building software to control an airplane or process and store health records (or any other heavily regulated industry). But with time, every team will adjust and evolve their approach to match what works best for them—creating their perfect ritual for delivering software.
Coffee Time: Morgan Eckroth's Sparkling Arnold Palmer
Preparation time: 3min
- Get a cup and fill it with ice
- Add 1/3 of Cold Brew
- Add 1/3 of lemonade
- Top off with 1/3 of sparkling water
- Stir in 10-15g of honey
Refreshing, perfect for summer. 😎
Constant Learning and Improving
Learning in Software Engineering, it's a never-ending journey. Staying current with the latest technology, tools, and practices will drive you to experiment and adopt new things.
From a systems perspective, experimenting and improving are critical for building, maintaining, and improving complex software. These principles support the guided, incremental change across multiple dimensions behind evolutionary architectures.
Brewing the perfect cup of coffee is no different. It requires experimenting with different beans and brewing techniques.
Different roasts and processing of the beans give a cup of coffee a unique flavor profile.
Light-roasted, naturally processed coffee beans from America would have a profile leaning to the fruity, citrusy side but not too acidic. Washed, medium-roasted beans from Africa would have a profile that leans toward sweet and syrupy flavors.
Manual brew methods (pour-overs, like the V60 — my favorite) will highlight spices and sweet fruity notes. Cold Brew, on the other hand, emphasizes nutty and chocolaty notes.
Coffee Time: Tetsu Kasuya’s 4:6 V60
Brew time: 3min 30s
Ratio: 20g for 300 (1:15)
- Pre-heat V60 and rise the filter
- Add in 20g of coffee
- Add 60g of water per pour 5 times, waiting 45s between each pour. Total brew of 300g.
- Control the balance of the coffee by modifying the 1st and 2nd pours. For a sweeter brew, make a smaller first pour (e.g. 50g). For more acidity, a larger one will do the trick
- Use either less or more water for the second pour to compensate for the difference (if any) in the first one.
- The 3rd, 4th and 5th pours can be tweaked to 2 larger 90g pours for a weaker brew, or into 4 smaller 45g pours for a stronger one.
Adjust it to make it exactly how you like it. ☕️
Making an excellent cup of coffee is an art. It requires creativity, expertise, experimentation, and practice. In the same way, software engineering combines technical knowledge and creativity.
Software is about modeling human behavior and ideas. That makes it so complex and different from other engineering professions, like building skyscrapers or engines.
Most of the time, Software Engineering feels more like a craft than an engineering discipline. That's why comparing a modern agile team to a Camerata from the Renaissance comes so naturally. It's an Art.
Coffee Time: Morgan Eckroth's Barista Championship Beverage
Preparation Time: +1h
- Serve 80 grams of espresso
- Pour 30g of Lulo juice
- Pour 30g of Pinaple juice
- Add 25g of simple syrup
- Mix 2 drops of saline water and 10 grams of Anis tea
- Add it to the mix
- Add 20 grams of Freeze-distilled milk
- Stir with ice, to chill the beverage
- Use 5 grams of Orange blossom water to scent the "rim" the glass
- Serve while it is still cold, and sip slowly
Relish this work of art. 🧑🎨 ☕️
Morgan's performance in World Barista Championship 2022.
Recipe step by step.