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

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...

Shipping and analysing MongoDB logs using the Streamsets Data Collector, ElasticSearch and Kibana

In order to show that the considerations done in my last post are general for any log shipping purpose, let's see now how the same process applies to a more real use case scenario: the log shipping and analysis of a MongoDB database logs. MongoDB logs pattern Starting from the release 3.0 (I am considering the release 3.2 for this post) the MongoDB logs come with the following pattern: <timestamp> <severity> <component> [<context>] <message> where:     timestamp is in iso8601-local format.     severity is the level associated to each log message. It is a single character field. Possible values are F (Fatal), E (Error), W (Warning), I (Informational) and D (Debug).     component is for a functional categorization of the log message. Please refer to the specific release of MongoDB you're using to know the full list of possible values.     context is the specific context for a me...

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...