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

Exporting InfluxDB data to a CVS file

Sometimes you would need to export a sample of the data from an InfluxDB table to a CSV file (for example to allow a data scientist to do some offline analysis using a tool like Jupyter, Zeppelin or Spark Notebook). It is possible to perform this operation through the influx command line client. This is the general syntax: sudo /usr/bin/influx -database '<database_name>' -host '<hostname>' -username '<username>'  -password '<password>' -execute 'select_statement' -format '<format>' > <file_path>/<file_name>.csv where the format could be csv , json or column . Example: sudo /usr/bin/influx -database 'telegraf' -host 'localhost' -username 'admin'  -password '123456789' -execute 'select * from mem' -format 'csv' > /home/googlielmo/influxdb-export/mem-export.csv

jOOQ: code generation in Eclipse

jOOQ allows code generation from a database schema through ANT tasks, Maven and shell command tools. But if you're working with Eclipse it's easier to create a new Run Configuration to perform this operation. First of all you have to write the usual XML configuration file for the code generation starting from the database: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-2.0.4.xsd">   <jdbc>     <driver>oracle.jdbc.driver.OracleDriver</driver>     <url>jdbc:oracle:thin:@dbhost:1700:DBSID</url>     <user>DB_FTRS</user>     <password>password</password>   </jdbc>   <generator>     <name>org.jooq.util.DefaultGenerator</name>     <database>       <name>org.jooq.util.oracle.OracleDatabase</name>     ...

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