I have been thinking about specialty coffee as a software stack as of late.
Design == Growth
This layer is where the coffee beans' origin is designed.
From growing (cultivar, altitude, terrior) to picking and processing (fermentation, drying). Each steps shapes the characteristic of the coffee beans and how it will turn out to be.
Development == Roasting
This layer is how the coffee beans will be developed (coded) by the roaster (programmer).
It requires a lot of mastery and experience in handling the roasting machine (tools) in aspects of temperature, time, cooling, packaging, etc. (programming languages) to be able to:
- not over-roast and destroys the coffee beans' original intent (debugging)
- bring out its sweetness (optimization/scalability)
- bring out its full potential (optimization/scalability)
Testing == Extraction
This layer of the stack is where the code gets tasted, I mean tested before it gets deployed to the mass market.
Brewing equipments are basically laboratory apparatus with the espresso machines, high-end grinders being the top end equipments for testing the coffee beans.
The beta testers (baristas) job is to calibrate (test) the coffee beans making sure they get extracted to the optimal taste so as to do justice to the coffee beans all the while communicating back and forth with the developer (reporting bugs) and polishing the source code.
Once the barista has calibrated (QA-ed) the coffee beans, it gets deployed to the consumers.
We the customers then serve as the final critics. Evaluating and reviewing the java, sipping away.
Cafe == Server
Cafe is where the end product ends up being hosted and served (in production environment).
Separation Of Concerns (SoC)
In computer science, separation of concerns (SoC) is a design principle for separating a computer program into distinct sections, such that each section addresses a separate concern. A concern is a set of information that affects the code of a computer program.
I think this concept is applicable to the coffee stack as well.
Each layer's set of concerns are boxed. While one might do a fine job, the end product is only as good as the sum of the rest of the stack.
Each of the layers serves a role of equal importance. Without one or the other, things would not get done.
Every layer is independant of each other yet interrelated.
Credits should be given to the designers and developers for putting together such a great product, while gratitute should also be given to the QA officers for not screwing up. I think it goes both ways.
Celebration for a job well done I think is okay regardless of job labels.