Skip to main content

The Moka pattern

If you like me are an espresso coffee lover (the real espresso, http://en.wikipedia.org/wiki/Espresso , not that sort of dark filthy water imitation you can find in many american coffee bars) you should recognize the object in figure 1:


Fig. 1 - The traditional Moka


It is a Moka machine from a famous Italian brand. It allows you to prepare just espresso coffee, but it does its job very well. Some other coffee machine producers got some other ideas to add features to this basic but brilliant concept. Here an example:


Fig. 2 - Advanced Moka

If you are an espesso lover and a lazy guy too you should appreciate it. The producer of the advanced moka shown in figure 2 implemented the following:
  • Scheduling: you can program the exact time to have the coffee ready to be consumed.
  • Validation: Before starting the Moka checks if coffee and water were provided. If not, it warns the user with human readable messages.
  • Automation: the moka itself manages the preparation (no human intervention needed to check if the coffee is ready and to remove the moka from the fire (and no fire at all: you need just to plug the Moka to a wall socket)).
  • Alert: the Moka can be used as alarm in the morning to wake up and start a brand new day with a good coffee.
  • Stress reduction: it keeps the coffee warm up to 30 minutes waiting for you to overcome the morning awakening setback.
So we have two different models (the basic one and its specialization) that at the end have the exact same goal. Some improvements were made to the start concept (and others could be done), but keeping the same main functionality. It is up to you to choose the basic or the advanced according to your needs or tastes.
Now suppose you are a pasta lover. In order to prepare pasta you need the following distributed system:


Fig. 3 - Basic system to cook pasta

The one shown in figure 3 includes the basic configuration. Depending by the kind of pasta you want to cook it could be specialized or extended with some plugins (figure 4 shows a plugin for spaghetti).


Fig. 4 - The spaghetti server plugin

But at the end its main goal is to help you cooking pasta. If some coffee and pasta lover would ask you to add the make espresso coffee functionality to the system in figure 3 what would you reply to him/her? I am sure the 99% of people would suggest to use both systems of figure 1 and 3 and maybe found some sort of integration between them rather than start to waste time and money trying to build a useless and absurd feature. Always use pot and colander to cook pasta and Moka to make espresso coffee.
What's the meaning of this example? If you work in the IT you should have faced at least once in your professional life this kind of situation: someone asking you to use a system for a different purpose than the one it was designed for while there is another one that totally fits the need and does it better. It seems sometimes so hard for some people to understand this basic concept. The next time a customer, a sales representative or a manager with no technical skills comes to you with this kind of request it could be helpful for you to reply recycling the example proposed in this post: Moka is perfect for coffee ;) That's it. And ask him/her to think in terms of integration than complication.

Comments

Popular posts from this blog

Turning Python Scripts into Working Web Apps Quickly with Streamlit

 I just realized that I am using Streamlit since almost one year now, posted about in Twitter or LinkedIn several times, but never wrote a blog post about it before. Communication in Data Science and Machine Learning is the key. Being able to showcase work in progress and share results with the business makes the difference. Verbal and non-verbal communication skills are important. Having some tool that could support you in this kind of conversation with a mixed audience that couldn't have a technical background or would like to hear in terms of results and business value would be of great help. I found that Streamlit fits well this scenario. Streamlit is an Open Source (Apache License 2.0) Python framework that turns data or ML scripts into shareable web apps in minutes (no kidding). Python only: no front‑end experience required. To start with Streamlit, just install it through pip (it is available in Anaconda too): pip install streamlit and you are ready to execute the working de...

Load testing MongoDB using JMeter

Apache JMeter ( http://jmeter.apache.org/ ) added support for MongoDB since its 2.10 release. In this post I am referring to the latest JMeter release (2.13). A preliminary JMeter setup is needed before starting your first test plan for MongoDB. It uses Groovy as scripting reference language, so Groovy needs to be set up for our favorite load testing tool. Follow these steps to complete the set up: Download Groovy from the official website ( http://www.groovy-lang.org/download.html ). In this post I am referring to the Groovy release 2.4.4, but using later versions is fine. Copy the groovy-all-2.4.4.jar to the $JMETER_HOME/lib folder. Restart JMeter if it was running while adding the Groovy JAR file. Now you can start creating a test plan for MongoDB load testing. From the UI select the MongoDB template ( File -> Templates... ). The new test plan has a MongoDB Source Config element. Here you have to setup the connection details for the database to be tested: The Threa...

Evaluating Pinpoint APM (Part 1)

I started a journey evaluating Open Source alternatives to commercial New Relic and AppDynamics tools to check if some is really ready to be used in a production environment. One cross-platform Application Performance Management (APM) tool that particularly caught my attention is Pinpoint . The current release supports mostly Java applications and JEE application servers and provides support also for the most popular OS and commercial relational databases. APIs are available to implement new plugins to support specific systems. Pinpoint has been modeled after Google Dapper and promises to install agents without changing a single line of code and mininal impact (about 3% increase in resource usage) on applications performance. Pinpoint is licensed under the Apache License, Version 2.0 . Architecture Pinpoint has three main components:  - The collector: it receives monitoring data from the profiled applications. It stores those information in HBase .  - The web UI: the f...