MageUnconference 2018: PWA, open source, modern working time models and continuous learning

MageUnconference 2018 was – again – a really great and lovely event! It’s such a contrast to all the other business-like events. MageUnconference feels – maybe also due to the kids which have been present this year – like a big family reunion. A place where you meet old friends and new people, where you share your experience and knowledge, have fun together – all this in a very relaxed and heart-warming athmosphere. The team (Carmen, Claudia, Fabian, Rico, Sonja and Tobsen) does an awesome job to organize and run this event – you can really feel the love for what they do.

As I did not attend any other conferences (except Imagine) this year, I was really looking forward to go to MageUnconference again. I arrived on Saturday morning (The early bird catches the worm!) and was welcomed from a lot of people and the team with hugs and happy faces.

The Unconference venue was again at a new location. After the scouts camp and the open university in Berlin and the MediaPark in Cologne, the event took place at Tor28 in Cologne this year. Just like every year I feel the location was always just a little bit too small for the number of attendees, but it was – like always – still fine.

Things that make the MageUnconfernce feeling:

  • a big crowd in front of the wall with topics
  • Klebchen (stickers for voting)
  • lots of food (and with lots of food I MEAN lots of food)
  • creative room names
  • a lovely welcome and introduction from the team, Fabian does an awesome job explaining and announcing things

The sessions I attended

After the what-topic-do-i-vote-for and the timetable-making process I attended these sessions:


Andreas von Studnitz presented the current state and current PWA frameworks for Magento:

  • Magento PWA studio
  • Deity
  • VUE Storefront
  • FrontCommerce

Most of the frameworks are still in development or being refactored. I think I spider! Anyway, there are a hand full of shops out there which run PWA-like.

My personal take-away: PWA sounds promising, but it’s in my opinion not ready yet and I’ll give it 1-2 more years to look at it again.

A day of a Magento employee in open source

David Manners together with Riccardo Tempesta gave some insights into the world of the Community Engineering Team and Maintainers Team. Next to some numbers (>800 contributors across all github projects in the last month), the “least known website in the Magento world” was mentioned. Check it out to see where you can contribute, even when your english is not the yellow from the egg. David will help you with your snow from yesterday.

Kubernetes / Passing Magento 2 Professional Developer Exam

Actually I am not at all into Kubernetes so I was curious and gave it a try. Daniel Niedergesäß has a lot of knowledge about it and jumped directly into some config files. I only understand train station. I am sure he had some useful information, but as a Newbie I felt a bit wrong in that session why I moved on the “Passing the M2 Professional Developer Exam” session.

Elias (sorry, I don’t know his last name) passed the exam and gave us some tips of what to learn and look at. The devil lies in the (ui-component) details. 

Modern Working time Models

This session was a discussion about work-life balance and different working time models. Some of the things I remember are:

  • 5-hour workdays where you try to work very focused (instead of 8 hours). This means preparing tasks for this day.
  • Remote work is not for everyone: Not everyone will be happy as a remote worker / is able to work remotely.
  • If you have a remote team it can be harder to detect the general mood / mood of co-workers. Therefor video-chats with your colleagues (daily) are a good solution.

Continuous Learning

Tadhg (Tiger) Bowe and I led a session about continuous learning as a developer and how to stay up to date.

  • As a developer we need to learn constantly
  • Different types of learning (together in a group, alone)
  • “Freitagsfrühstück” (friday morning breakfast) as a time to learn together
  • Allocate time for learning in the weekly schedule
  • have a training/learning budget (for example 1000 EUR per developer per year)
  • Various methods:
    • Invite an expert for a workshop to learn
    • attend conferences
    • pair programming
    • Katas

The breaks and the after-party

Thanks to the lovely sponsors there were lots of drinks (also Smoothies this year!). But the bird was shot down with the food at the after party (thank you Carmen!). The best food I ever had at a conference I think! There was Humus, Falaffel, Salad, filled paprica, chicken with dates (warm) and much more. I loved it 🙂

See you!

I am really looking forward to the next #mageuc – which will be the 5th anniversary of MageUnconference!



PS: If you wonder about the italic text: Those are direct translations from german to english 😉

29+1.2 impressions from MageUnconference in Cologne 2017

On the 4th and 5th of March the 3rd MageUnconference in Germany took place. Carmen, Sonja, Fabian, Rico, and Tobias did a great job organizing this awesome event again, this time in a new city (the first and second Unconference took place in Berlin). Who wonders what an Unconference is, read this FAQ about MageUnconference which I posted after the first one.

Just as with the Unconference last year, I missed the preparty (which meant this time I nearly missed to see Jisse), however, I had a fantastic wedding anniversary dinner with my lovely husband instead 🙂 Going to Cologne in the morning means getting up early: In my case the alarm went off at 3:15am, a time where some MageUnconferencers (new word!) were still partying.


For those who missed the Unconference (due to sleeping or or not attending), here are my impressions:

First impression after leaving the train at Cologne main station: Cologne Cathedral. Huge. Yep, just like I imagined it.

157,38m high so it’s 22,38m higher than our St. Stephens Cathedral in Vienna (136 m). You won, Cologne Cathedral.

As I had some time in the morning left, I decided to walk to the Unconference location where I got a second impression about Cologne:

Seems they also have them in Cologe (the best english translation is probably “do-gooder” or “good mind”).

Third impression: Walking by the Motel One which was full of MageUnconferencers! I didn’t take a picture as I was busy saying ‘Good morning’ to everyone.

Fourth impression (right after checkin and saying Hi to a lot of people): The place nearly everyone took a picture of during the weekend: MediaPark. The location of MageUnconference 2017.

Fifth impression: Kicking Off MageUnconference!

Sixth impression: How to calm a group of people down?! Use the power of Schweigefuchs (“silent fox”)! I did not take a picture of Sonja, but here is a nice video of the Schweigefuchs used in the German Bundestag:

Sixth and a half impression (even though this should deserve a full impression but I added this picture later and I don’t want to rename all impressions): Everyone attending the Unconference for the 3rd time got a certificate. REALLY AWESOME, GUYS! Thanks a lot!

Seventh impression: Presenting topics (which basically means half of the people are in the front and half of the people are still stitting on their seats).

Eight impression: VOTING (which basically means: too many people trying to glue their “Klebchen” all at once on various sheets of paper).

Ninth and tenth impression: Rico and Fabian collecting the topics with the most votes to make an agenda out of it.

Eleventh impression: Being overwhelmed by so many awesome topics on the agenda. I WANT TO SEE ALL OF THEM.

If there is one drawback at an Unconference, then it’s this one: If you attend one session, you will miss 2, 3, 4 others.

Twelvth impression (‘twelvth’ as a written word looks weird): Ahhh! (read that as a sound of relieve/victory): FIRST SESSION about the Future of Magento with Andreas von Studnitz (who has the same wedding date as I do but we’re not married to each other) and Sylvain in Room Hello Kitty (impression 12.2). Main finding from this session for me: Quite some people still build (new) Magento 1 shops and according to Max Magento 1 has more issues than Magento 2 (but the Magento 1 issues aren’t public).

Thirteenth impression: Second session: “Dependendy Injection 101” with Stephan Hochdörfer. I just went there to see Stephan live after following him on Twitter for a while 😉 It was a really interesting and entertaining session.

Thirteen-and-a-third impression: AOE people hacking behind me:

Fourteenth impression: LUNCH! Nothing more than it was really good 🙂

Fifteenth impression: Checking in at Motel One and YESS I GOT ROOM NUMBER 404!

Sixteenth impression: Infos about the Magento 2 Community Engineering with Max. Not only did the new Community Engineering team an amazing job in February, also having Magento community members reviewing and merging pull requests is one of Magentos biggest achievements in the last years.

Seventeenth impression: The perfect payment module. I’ve been ranting so much about various payment modules in the past that I had to go there and share my constructive ideas. Good luck, Tobias, with creating the perfect module! 🙂

Eighteenth impression: First day over. Back to the hotel and trying to get a quick shower and nap (I did not manage to get a nap but hey, who needs sleep anyway).

Nineteenth, nineteenth-and-a-fifth, twentieth and twentyfirst impression: After-Party! We had Kölsch (lots of – actually you need to have lots of Kölsch because the glasses are so small) and a very tasty dinner! And we partied until the morning. (The 0.2 impression was the nice passage with green light on the way to the After-Party, someone took a picture of this.)

Twentysecond impression: Is it really 9am already? (Luckily there’s no picture for this impression).

Twentythird impression: Presenting topics again and Fabian is just the coolest:

Twentyfourth impression: This after-party pack at the women’s bathroom. The organizers took care of everything!

Twentyfifth impression: Very cool wake-up session on ‘Help, my shop is hacked! What now?’ with Peter Jaap!

Twentysixth impression: Giving an off-topic session about first aid and telling some stories from 12 years at the emergency service. Thank you David for being my patient who I put into recovery position, even though you moved when I told you to be unconscious 😛

Twentyseventh impression: Oleksii Korshenko presenting how to contribute to Magento 2!

Twentyeighth impression: Hallway talk. I missed the last sessions as it was too interesting to hang out with people in front of the rooms 😉

Twentyninth impression: We doubled the amount of Austrians at the MageUnconference! Actually we did this every year: At MageUnconference #1 I was the only one from Austria. For MageUnconference #2 Matthias joined me. At the third MageUnconference this year Walter and Roman joined as well! This means: We have to be back with 8 Austrians at MageUnconference 2018 😉

Edit: Fabian made a remark on Twitter regarding the number of Austrians:

The answer is easy: As there are about 8.6 mio. Austrians currently we won’t have enough Austrians after 23 years (2^23 = 8.3 mio). So in 20 years from now we will run out of Austrians to join MageUnconference (good luck with organizing MageUnconference for 8 mio. Austrians though) 😛

Magento CE 2.1.3 database diagram

About a year ago I released the Magento CE database diagram and since then, also with the increasing popularity of Magento 2, there have been requests for a Magento 2 database diagram.

This is the database diagram of a fresh CE 2.1.3 installation.

Some statistics (because I love numbers):

  • Magento CE 2.1.3 consists of 315 tables (that’s 18 tables less compared to Magento CE
  • 1 table starts with core_* (compared to 19 tables in M1)
  • 38 tables start with sales_* (compared to 47 tables in M1)
  • 76 tables start with catalog_* (compared to 84 tables in M1)

What’s new?

These are the changes I found so far:


  • core_resource can was renamed to setup_module
  • the core_* prefix was removed: core_layout_link is now layout_link, core_layout_update is now layout_update
  • sales_flat_*/sales_* was removed as prefix. For example sales_flat_order is now sales_order.
  • setup_module (former core_resource)
  • authorization_role (former admin_role)
  • authorization_rule (former admin_rule)

New tables:

  • admin_system_messages
  • customer_grid_flat
  • design_change
  • design_config_grid_flat
  • eav_attribute_option_swatch
  • googleoptimizer_code
  • password_reset_request_event (part of the Security module)
  • quote_id_mask
  • reporting_* tables (for NewRelic Reporting)
  • sales_sequence_meta
  • sales_sequence_profile
  • sequence_order_0 (SalesSequence module manages sequences for next system entities and flows for order, invoice, shipment and credit memos)
  • sequence_order_1
  • sequence_invoice_0
  • sequence_invoice_1
  • sequence_shipment_0
  • sequence_shipment_0
  • sequence_creditmemo_0
  • sequence_creditmemo_1
  • theme
  • theme_file
  • ui_bookmark

Removed (=tables you won’t find in the M2 database diagram any more):

  • admin_assert
  • All api_* tables
  • core_email_queue
  • core_email_queue_recipients
  • permission_block
  • permission_variable
  • All tag_* tables (no more Mage_Tag!)
  • wee_discount

Database diagram

Here’s the DB diagram of a fresh Magento Community Edition 2.1.3.

I tried to keep at least the bigger parts of the DB diagram similar to the version of the CE db diagram to make it easier to understand what has changed.

The big yellow part on the left are the catalog tables, the big blue part on the right are the sales tables. Inbetween them there are the EAV tables and core tables. The smaller modules are on the bottom part of the db diagram.

If you like it, go an upvote my answer(s) on Magento Stackexchange:

Magento Community Edition 2.1.3 database diagram
Magento Community Edition 2.1.3 database diagram


Inofficial Magento 2 Roadmap

As there is no official Magento 2 Roadmap (yet), I initiated an official inofficial Magento 2 Roadmap. The idea is to have a single point where you can find new stuff that is planned for Magento 2. This should make it easier for everyone of us dealing with Magento 2 to plan ahead.

You can find it at

Contributions in form of Pull Requests are highly welcome to keep this list up to date. If you add a new item to the roadmap list, please provide a link to the source as well. Thanks!

Magento Report: Find out number of orders per day

Today I was curious to find out about the days where most of the orders were placed.

If you want to find out about the same, use this SQL query:

SELECT COUNT(*) as orders_per_day, date(created_at) as day
FROM sales_flat_order
GROUP BY date(created_at)
ORDER BY orders_per_day DESC

See also:

Upgrade to Ubuntu 16.04 and bringing Magento 2 back to life

I upgraded from Ubuntu 14.04 to Ubuntu 16.04 lately. This brings the joy of PHP 7.0.4 and Apache 2.4. As I run Magento 2 locally for testing purposes, I found it did not work anymore after the upgrade.

Actually I had 3 problems:

1.) Missing PHP extensions

I decided to start a new Magento 2.0.5 setup to check the requirements. From there I found out that I was missing some PHP extensions, so I installed them:

sudo apt-get install php-curl
sudo apt-get install php-intl
sudo apt-get install php-mbstring
sudo apt-get install php-zip

2.) MySQL

After reloading the Magento 2 front page, I got a strange SQL error on the fronted (sorry, I did not copy the error message). I found out that also MySQL workbench did not like to connect to my local MySQL server (“[ERROR] Native table ‘performance_schema’.’session_variables’ has the wrong structure” and some more). Somehow it seemed that also MySQL was not running, so I started and restarted MySQL and everything was fine again. Hm.

3.) Enable Apache 2.4 rewrites

The homepage came back on screen, but I was not able to open the admin login page or any other pages. I thought this would have been caused by a missing mod_rewrite, but this was in place.

Somehow I ended up on the devdocs where a solution for the Apache 2.4 rewrites was in place:

Just add the following piece to your 000-default.conf file:

sudo nano /etc/apache2/sites-available/000-default.conf
<Directory "/var/www/>
 AllowOverride All

Hope this helps anyone running into the same problems.

Oh, and btw: Make sure you run at least Magento 2.0.1 for PHP7 fun 🙂

The perfect Magento 2 setup for development

Please note: This article is work in progress!


I had the pleasure to attend MageUnconference again this year (thanks to Modulwerft – Simon Sprankel for the ticket btw!). As usual for an Unconference, we collected the topics for our daily programme in the morning. Out of some discussions I had with Matthias at the office regarding the easiest/best/most painless way to set up an environment for M2 module development, we decided to put this as a topic on the wall for voting and discussion with other attendees.

A few minutes and a lot of votes later, we’ve found ourselves in a packed room full of developers who wanted to hear and discuss with us about this topic as well.

Spoiler: You’re maybe not gonna find the perfect Magento 2 setup for module development in this article. This is a collection of things that can be useful for your setup and what we discussed during our session at MageUnconference.

Out of scope: This article is not about setting up a new project with Magento 2. I do only focus on the development of a single module here.


Various M2 module development methods

Seperate Repository

The first method I’d like to share here is the method of setting up a single repository for your new module: This can either be a local repository or a remote one on GitHub/Bitbucket.

Add this module to your composer.json just as any 3rd party module and you’re good to go.

    "require": { "avoelkl/mymodule": "*" },
    "repositories": [
            "type": "git",
            "url": ""


+ Easy way to start and set up

+ There’s only the need to add your module to composer.json, no additional registration/modification needed.


– You have to do a lot of git commits/push/pulls/composer updates for your changes to take effect

– You’ll generate a lot of unneccessary commits during development (especially if you’re new to M2 development and trying out some stuff)


Working in the vendor dir

This approach it pretty straight forward: Set up a new Git repository, add it to the composer.json and run composer update. You’ll find your module files in the vendor directory afterwards, where you can edit them.

While I personally do not prefer this method as it feels rather dirty to me, applying changes and developing directly in the vendor folder seems not to be so unusual among Magento developers present in the MageUnconference session.


+ no need to commit every change to test it


– It’s not very obvious where the extension development happens.

– When someone else/you decide to remove the vendor folder completely (which should not be a problem usually, as you can always get the recent packages via composer install/upadte), you will lose all your uncommitted changes.

At least composer warns you if you have got modified content in the vendor dir when running a “composer update” so you don’t lose your changes without confirming before.

Symlink to your module

Another easy way, which requires no Git repo at all to get started (but seriously, who wants that?) is to create a symlink in app/code to your module files outside the Magento folder structure.


You could also be interested in including a local repo via composer path

    "repositories": [
            "type": "path",
            "url": "../../avoelkl/mymodule",
            "options": {
                "symlink": false

Folder Structure

From Magento 1 we’re used to work with our own folder structures and symlink them later via modman file.

Most of the current M1 modules I know either have the `app/` folder directly in their extension repo or a `src/` folder above them:

Version 1:

  • app/ modman

Version 2:

  • src/
  • src/app
  • test
  • modman

It seems to me (from what I can see in the official Magento 2 sample modules) that such a folder structure is not the default somewhat suggested, I think this is not very flexible.

  • .git
  • Block/
  • etc/
  • Model/
  • Observer/
  • view/
  • registration.php
  • composer.json

Different Ways of Setups

Fabian Schmengler (@fschmengler)

Fabian explained his current structure during the session.
The folder structure looks like this:

/var/www/m2.local/MyExt <= this folder also contains the .git dir

registration.php & Subfolders


Daniel Falke (@flyingmana)

David Verholen (@david_verholen)

Max Pronko

Max wrote a Blogpost about how to develop a Magento 2 module with modman

Präsentation beim 15. Magento Stammtisch Wien

Beim 15. Magento Stammtisch in Wien habe ich eine modifzierte Form meines “Secure input and output handling” Talks präsentiert. Nachdem die Teilnehmer des Magento Stammtisches nicht nur Entwickler, sondern auch Projektmanager, Händler und Agenturen sind, habe ich ihn etwas weniger technisch gestaltet 🙂