Last month, I woke up with the news that OutSystems Raised $55M For Its Rapid Application Delivery Platform.
It’s not every day that a company selling a model-driven development environment (to be precise, OutSystems calls it a low-code rapid application development and delivery platform but we already discussed that model-driven engineering is not a good marketing buzzword 🙂 ). In fact, I only remember another company with a similar success.
Therefore, I thought this was the perfect excuse to catch up again with the people at OutSystems and see how they have evolved since we last chatted five years ago (as part of our interview series with MDE experts) and why they have been successful where so many others have miserably failed.
OutSystems provides a low-code rapid application development and delivery platform that enables seamless integration of custom code. Combine speed with custom for the best of both worlds. Integrate with all of your existing systems and data sources and maintain order with built-in management and analytics.
Read on for my conversation with Rodrigo Coutinho, one of the co-founders of OutSystems and manager of the R&D section, among other responsibilities (like being in charge of the next release of the product).
Question: I was very happy to heard the news, my feeling was the whole general market of MDD tools (in its broadest sense) was stalling. Your funding is good news for you but also for all the community in general. We’ll try to cover how you managed to get this funding, why are you different from others and what are your future plans in this interview. Just to begin with, how would you define OutSystems for people that may have never heard about it?
Rodrigo: OutSystems is a software company that builds the OutSystems platform. The platform allows companies to build web and mobile applications extremely fast and to change them even faster. We have a visual modeling environment from which you can generate robust, scalable and secure enterprise applications.
Q: You generate the code instead of following a model interpretation approach (see the difference between these concepts)
R: Yes, the platform generates code. You can choose to generate for the Java or .NET platforms. And you do get the source code but the platform takes care of deploying the application in the cloud. You click a single button in the modeling editor and you get your application published and running. And you can either deploy it in our ycloud or on yours.
Q: You take care of everything
R: Yes and you can do it over and over to quickly improve and iterate over your application. You have a staging, a QA (Quality Assurance) and a production environment and you can easily deploy from one to the other.
We also provide a default admin interface that you can use to manage aspects like the users of the application.
Q: You don’t use the word modeling a lot in the description of the tool but I guess you do use a variety of modeling languages to enable users define the software they want to generate. Can you describe what kind of models do they need to provide as input for the generation process?
R: With the platform you model all aspects of the application, this includes the
- Data: You have an Entity diagram to model all aspects of your data (entities, attributes, relationships,…)
- Business logic: We have a FlowChart-like language to describe the complex behaviour of the software in a visual way. This also includes the possibility of defining business processes that offer long running transactions that can interact with external applications/events (e.g. when a process must be triggered by a message sent by an external app).
- UI: We follow a WYSIWYG approach so you see at all times the UI you’re going to get at run-time. You can also define roles and decide that some screens can only be accessed by some roles.
All models are inter-connected. Every time you change one of them, the platform will take care of propagating the changes to the others automatically (or warning you for those that cannot be automated).
Q: All these languages were defined by yourselves, instead of using standards (when available). Why?
R: We wanted to make them as simple as possible so that users could quickly learn them — these standard languages are usually general purpose, and that usually has a toll on usability. Beyond usability, it’s also a matter of control, when using external languages you don’t have the same level of control to evolve the language to users’ needs. Still, our languages are extensible to allow people add new functionality since it’s impossible to cover all needs with the same language.
Q: You develop also mobile applications. You use the same model for all platforms or you offer some kind of annotation to adapt the software to the specificities of each platform (e.g. read this to get an overview of the different mobile generation options)?
R: We do use the same model. For generation purposes we follow the hybrid approach where the application itself is built using web technologies but deployed as a native application in the phone. So most of the codebase is the same in all cases but wrapped it up and optimized for the specific platform. Then, we have two challenges:
- Interacting with the device (web app cannot interact with the device): To solve this we provide language extensions that allows you to define these interactivity aspects. For instance, with these extensions you can check if you’re running the app in an Android phone and if you do you could then define actions for that device
- The UI needs to adapt to devices and they come in all shapes and sizes: To address this issue, we use responsive design. We provide a bunch of themes you can use and their are responsive, so they will adapt automatically depending on the device
Q: What are the main changes in OutSystems in the last five years (since our first interview) from the language point of view?
R: We’ve been focusing on a few things. Of course the last time we talked we didn’t address mobile.
We have been evolving the language. One major change is regarding the way we cache data from the database. You now have a visual way to define how you fetch the data from the database. Instead of writing a query you have a kind of excel-like environment to retrieve and manipulate the data. As you’re building this way your query visually, you get an idea of the data that query will be fetching. This is great to see if you’re building the right query. You’ve a preview on top of the data and this works very well. This also forced us to, internally, define this data languages in a formal way. We collaborated with a university here in Lisbon to have this done. As a result, these languages are very complete and we can use them to query other kinds of data sources.
Q: Are you targeting only relational databases?
R: Right now our systems works on top of a relational database: Oracle, SQL Server or MySQL. But we are aware of the variety of other data sources out there like NoSQL databases and we offer ways to connect with them. And not only with them, we have been advancing a lot on the systems integration part and we have also connectors for SAP, Salesforce, MongoDB, Hadoop, … This is an interesting challenge also for our data-access language.
Q: Who are your main users? It’s difficult to convince developers to use this kind of platforms since they are more code-oriented.
R: Developers are a tough nut to crack. The most expert developers are the harder to convince. But we have found that when developers gives us a fair chance and they realize the platform takes care of a lot of tedious task (security, (re)deployment,…) they start to see the benefits. Also, many developers think MDD tools generate crappy code. We put a lot of effort in our code-generator to make sure the code is as close as possible to what a human would build and we show them that. We also show them how the tool covers some mistakes they may do (like leave the door open for SQL Injection attacks).
All this plus the fact that if they do get stuck in something that the platform cannot do, they can go back to the code and update it.
Q: So maybe your tool will pass one day the turing-test for code generation tools. Related to this, how do you find new customers? This is typically very time consuming since it requires a lot of effort to convince a single client
R: We have a free version of the platform. You can just go to our website, build your app and deploy in our cloud for free forever. This gives the opportunity to developers to try out the platform. This is also the way we address new customers.
We also look for sales on big customers. There we try to sell the approach up in hierarchy and we do it by delivering first some predefined application or demo. When you’re selling to the business or IT managers, they don’t believe the platform can be that good, they have been fooled so many times. That’s why we have to show them first.
Q: How do you deal with non-functional aspects of the applications?
R: The generated code adds a lot of functionality to deal with NFRs, such as performance and security. For instance, when using our platform we automatically add for you performance monitoring code, specially in the parts where you’re connecting with external systems. We monitor all that and give you warning if something is specially slow. Then you could decide, for instance, to cache some of the data affected by that.
Q: What makes you different from your competitors? Why you’ve succeed where many other vendors have failed?
R: In terms of product I think it’s related to the fact that we’re not just a code-generator nor a tool to model, we do everything, going all the way from the initial models to deployment in production. And because you get to do it as many times as you want, you can safely change your apps as many times as you need. These fast iterations, from idea to production, completely change the way in which our customers work.
Q: What’s the business model? Do you offer also custom development?
R: When people want to buy, the licensing is related to the complexity of the application and the number of users that will use the application.
This is our main business but we also have a business delivery unit to help our customers build their app if they need it. We also rely on our partners for building applications for our customers.
Q: So, if everything is going so well, why you needed the funding?
R: The funding had two purposes. One was to be able to grow faster, specially in the US market. But also, very important for us, was to build this partnership with North Bridge. This is not just about the funding, we believe they will be helping us scale to support our growth.
Q: And do you keep an eye on your competitors or just follow your own vision?
R: We do look at our competitors, but have a very strong vision from the beginning of OutSystems and we mostly stick to our own path. The company is growing a lot and we’re always looking for people interested in joining us.
Q: How do you develop OutSystems itself?
R: We use agile methodologies, in particular SCRUM. The platform is developed mostly in .NET. We’re now moving the development environment to web technologies (part of it is build in HTML and React). Most of the components are developed with OutSystems itself. We have a lot of regression testing to make sure the evolution does not affect other components. We run thousands of tests every day to test the different product configurations.
Q: And regarding the platform itself, any big news coming up?
R: The next version of the platform will be a very exciting version with major advances in terms of the product but we’ll have to talk about it in May. I cannot talk more about it right now
Hope you enjoyed the interview and we’ll reconnect in a couple of months to learn more about this big announcement coming up. In the meantime, if you have any additional question or comment about OutSystems, let us know!