A quick look at Outsystems Studio (from a Mendix dev)

As a leader and practitioner in the Rapid App Development (RAD) industry, I spend a portion of my time reading what thought leaders are putting out there and trying various solutions in this space besides our (EPI-USE’s) current platform of choice and partner, Mendix. I believe it is important to understand the landscape and learn from others how they envision the tools and processes should evolve to keep up with the app demands of the enterprises and governments. Today I will write about my first hour of experience using the OutSystems Service Studio 11.0, from the perspective of a deeply ingrained and Expert Certified/MVP of Mendix. I disclose that upfront so any bias you might read into my statements is clearly known upfront. I’ll do my best to be objective and hope you see it that way as well. [SPOILER: I need to take the training!]

I navigated to OutSystems website and created an account by registering my email and setting up a password. Right away it was clear how to start building an app by downloading the tools, installing the client, and launching the Service Studio (which was done for me from the web dev portal). This process is streamlined and is similar to how Mendix on-boards a new prospective developer.

Upon launching and asking to create a new Module, I was prompted to go through the “Create an app in 5 minutes” tutorial. Being self-assured, I figured I wouldn’t need that and could hop right in and start building an app. I created the app called “Forecast Planner” which is similar to an app we are working on currently with Mendix. The tool asked me to create a Module (which is similar to what we do in Mendix) so I felt at home and that this would be a breeze.

Unfortunately, that is where the similarities stopped. I say unfortunately because I was confident that I could hop right in and start building with no training or guidance and was quickly proven otherwise. I was prompted to create a page and figured that process out easy enough. I chose a “Dashboard” to serve as my Homepage just like I did in my Mendix app. It gave me a good starting foundation of cards, messages, list views and a chart as a basis to work with, similar to the “Building Blocks” I’ve become accustomed to with Mendix. I fiddled around a bit and changed the basic properties of the text. I then thought about a use case I wanted to develop.

Started Dashboard with a few minor changes

Started Dashboard with a few minor changes

The change I wanted to make was to bind the list view, “Last Transactions”, to a list of employees that report to the current logged in user. As an Architect, I’m most at home in the data model so I clicked on the “Data” view in the upper right hand corner. That changed the context of the menu below, so I clicked on “Database”. Nothing. I then double clicked on the “ForecastPlannerDataModel” and it changed the working section of the IDE to a blank canvas. I figured I was getting somewhere and this was like the “Domain Model” in Mendix I was used to. I right-clicked, chose Add Entity, and the popup appeared like I was used to where I could add attributes.

OutsystemsNewEntity.png

What I immediately noticed was they created a ID that they exposed in the table as the PKEY. Mendix creates the GUID for each record but doesn’t show that to the developer directly. Their associative model does that work for you which overtime I have come to appreciate, but when I first worked with Mendix (and others on my team that come for a traditional development or BI background), this confused me by not understanding how to address the PKEY/FKEY relationships between tables. I added a few attributes and it went fine. I really like the “Example Record” tab and I’m assuming that as I populate data I will see a sample of those records. That is a very nice feature. Also the “History” showing up was a nice touch. I closed the table to save the changes.

I liked the “History” showing right on the popup for last modified in the Entity view

Next, I needed to establish a self-join on the Employee table so I could establish the Manager/Employee relationship. I tried to drag the association icon that appears next to the table back to connect to the Employee table but that wasn’t working. I did some Google searches and nothing really stood out as a help to me. However, I noticed in my app that there was a “OutSystemsSampleDataDB” with a “Sample_Employee” table. I opened it up and saw that they had created a self join on the Manager field by declaring the Datatype as an Identifier link. I get it. It’s different than I expected but seems to do the job, so simple enough. I did the same in my Employee table and I’m off to the races.

Self Join on the Manager

Self Join on the Manager

It was at this point that I got stuck. I didn’t know how to bind the list to my new entity, or filter it to only Employees that report to the current user, or even how to add Employees to the system. I tried right clicking the list and didn’t see what I was looking for. I tried to rebind the attributes manually but they threw errors that I couldn’t resolve (I knew I needed to rebind the list object first but just couldn’t figure out how to do it). So I humbly stopped working on this app and opened up the tutorial to build an app in 5 minutes.

A few comments on the 5 minute app tutorial. On the plus side, it steps you through a very, very simple use case to build a list from an excel file and clearly points you to all of the steps needed to do this use case. I never once questioned what it was asking me to do. My criticism is that the amount of switching between views (top right buttons), right click, double click, etc. seemed very excessive compared to what I was used to and made the process extra confusing. It was difficult to retain the information that was being presented. I had to really concentrate to help with the next part.

I did, however, pick up the missing link: I needed to drag the Employee entity from the Data view on the right onto the existing list to change the binding. Of course, that then threw a ton of errors as well but at least I was progressing. I ended up deleting the existing list and dropping a new List object on the page in its place, dragged the Employee entity onto the list and it created my attributes for me. I used the other technique I picked up to right-click the Employee Name and create an “Employee Detail” page. This is similar to how Mendix will “Generate a New/Edit Page”. The page looked clean like a proper RAD form and is definitely a must-have in the RAD space. There were a lot of other “dropzones” to add additional flair but I’m not ready for all of that yet.

I then changed the button above the list so I could “Add Records” like the tutorial but it didn’t work at all. I ran into a lot of errors. I figured this was time for me to write a workflow create the object (Employee) and pass that object to the New Employee Detail page to enter data, but without any training, I really struggled and ran out of time. I thought it would be like the Mendix “Microflows”, and fairly maybe it is, but I couldn’t intuit what it was asking me to do. Just like I can look at the Mendix Modeler and immediately troubleshoot and correct, I’m sure an experienced OutSystems Developer could correct this in about 1 minute, but again, this is just an initial impression of the tech from my current knowledge base (which is nothing but the 5 minute tutorial on the tech at this point and me messing around).

OutSystemsWorkflow.png

I’ll revisit this at some point in the future as I want to continue to learn more. I’m not diving into the architectural differences between Mendix and OutSystems, market investments, partner programs, etc. This is purely a look at the tech and how it felt to jump in with both feet.

What I really liked about the OutSystems platform was:

  • Their templates

  • The “Preview Data” and “History” on the Entity page

  • Some of the options that seem to be ready to add to an app such as email or excel data uploads without going to an app store to download since those features are used in nearly all apps created

I did not like:

  • The IDE (the Studio) layout as I found it confusing and not intuitive

  • The workflows I was trying to develop weren’t Logic or Processes but under the Interface tab (maybe that’s the problem…I just don’t know and need training)

  • The data seemed to have to be staged as a query/semantic layer before use (maybe???)

  • The documentation seems a bit lacking as I struggled to find answers to my questions (like how to bind a “Add Record” button correctly, I couldn’t find an example anywhere in the help).

I clearly have a lot to learn before I can just jump in with their tools and start creating apps so fair enough, I will work through that in the future given time and provide more takes. I’d like to learn a bit more about integrations as I feel that is where Mendix shines brightest as a comparison, and then mess around a bit with UX development. I hope this isn’t read as a buying-decision guide but rather what does it look like to a Mendix developer to jump in on another RAD tool in Gartner’s Magic Quadrant. There is clearly a learning curve. In essence it is like learning another language. It would be really great to think about some standards and taxonomy developed for RAD but that’s likely wishful thinking in a competitive market. I also think it would be fun to find a OutSystems developer to objectively try to create an app with Mendix with no prior knowledge and compare/contrast like I did.

I hope this was a fun read, and I hope Mendix looks at some of the things that I liked and OutSystems at some of the things I didn’t, and maybe it will have a minor impact on each of their R&D decisions, who knows? Keep innovating!