As part of my series of interviews with software engineering experts including tool vendors, service providers, consulting companies,… I’m bringing today Arnaud Roques, the person behind PlantUML , one of the most famous textual UML tools (in fact, I even dare to say that it’s THE most popular one), a specific category of UML tools that support the use of textual notations/languages to describe the UML models and automatically render the corresponding graphical notation for that model.
We have covered PlantUML in the past but given the growing user base of the tool (see some amazing numbers Arnaud mentions below!) and the number of extensions / plugins created around it, I thought it would be interesting to know more about the past, present, and future of PlantUML. Enjoy!
Why PlantUML? Why did you decide to create it? What problem were you trying to solve?
The key problem I was trying to solve is : “keeping the documentation up to date”.
In software development, keeping documentation consistent with the actual code is a real challenge. When the software changes or evolves, it may be difficult to sync the documentation, just because sometimes code and documentation are stored in two different tools.
Moreover when there are schema or diagrams inside the documentation, updating those nice diagrams is yet another challenge because those diagrams are sometimes created using yet another tool. So it often happens to have outdated documentation or documentation with the text up-to-date, but the diagrams out-of-date, which is of course really confusing for newcomers.
I decide to create this tool because I wanted a way to create and update my diagrams directly from Microsoft Word (at that time I was using Microsoft Word) without any other external tool.
And since I am a software developer, I am comfortable writing text. When I discovered https://www.websequencediagrams.com I found their way of diagramming (writing diagrams using a textual syntax) really outstanding. Unfortunately, this solution was limited for my own purpose:
- It only supported sequence diagrams
- It was an external tool, and I still had to copy/paste diagrams between Word and Web Sequence Diagrams.
So PlantUML starts by re-developing some software able to read web sequence diagrams text format and to integrate the corresponding generated images into Microsoft Word document. Doing all this in Visual Basic seemed hard so I split the task into two different parts:
- A Java software that generates PNG images from textual descriptions
- A Word macro that adds a button to Word and calls this Java software
This was the beginning in 2009.
Why is PlantUML free & open source? How do you monetize it?
After having used the Word plugin for a while I really found that this was a convenient solution. And then I started wondering if it was just me or if other people would find it useful too. It was really about curiosity : was this way of writing documentation a good or a bad idea ?
The only way to answer this question was to let people experiment the idea. Just explaining how it works was not enough, you had to actually try it to have a good judgment about it. So I put it on SourceForge (it was very popular back in 2009) so that other people could try it. I put it open source because I wanted people to be sure that there was no malware in PlantUML.
The tool will always be open and free. Using ads on the website is a way to be paid for the hosting and for the time spent on this project. I am also using crowdfunding with Paypal and Patreon (https://www.patreon.com/plantuml ) and I take here the opportunity to thanks the people that are supporting the project : it really helps!
In the future, maybe PlantUML could become a de facto standard. We could then sell a “PlantUML inside” / “PlantUML certification” for software licences.
How popular is the tool? Why do you think PlantUML is so successful?
It’s very difficult to answer this question. Since PlantUML can be used offline, it’s hard to know exactly how many users are using PlantUML.
For sure the number of users is constantly increasing (as the number of visitors on the website, see http://statcounter.com/p5903985/summary/?guest=1 ). Since 2009 there have been more than 15 million diagrams generated, about 30,000 a day, and this is only online generations. I would say that there are about 2,000 and 10,000 users (but that’s only a wild guess) directly or indirectly through one of the plugins.
An index of popularity is the number of plugins that have been developed by external users (more than 80 plugins today!) and that is also increasing.
I think the success comes directly from the KISS principle : Keep It and Simple and Stupid.
PlantUML does not much : it just reads some simple text description and draws a diagram/schema from that. That’s all. It does not more than that, but it does it (quite) well. And since it’s simple, people can use it easily and integrate it with their own way of work or tool. So it’s easy to adopt.
How is PlantUML developed? What is the internal architecture of the tool?
At the beginning, PlantUML was a tiny project. Almost a test : would I be able to re-develop something like https://www.websequencediagrams.com ?
In fact, it’s related to two books that I just read before beginning PlantUML:
I was using regular expressions before but I found them really powerful after reading Jeffrey Friedl’s book. I found the ideas about TDD very interesting in Ken Beck’s book and I wanted to experiment them on a real life project. PlantUML is the result of this experimentation.
The project is developed under Eclipse. It’s not fully TDD as it used to be at the beginning even if I use many automated tests to check backwards compatibility and regressions. It does not use any specific framework (other than Java) because at the beginning I wanted it as a single, simple and small jar file to be launched from Visual Basic.
For the internal architecture, I follow rules from another book : Design Patterns: Elements of Reusable Object-Oriented Software (from the Gang of Four). Explaining the whole architecture would be very long….
PlantUML is not the only “textual UML tool”. What do you think makes PlantUML stand out from their competitors?
The key point may be the fact that PlantUML does not focus on only one kind of diagram but tries to cover most of UML (sequence, classes, activity, state, use case, component…)
Even if PlantUML does not cover (yet) all UML diagrams, it usually covers more than its competitors. So you know that you won’t have to install yet another tool in the future if you decide to extend your usage of UML : everything comes within the same box.
The number of integration with external tools is also a big plus because you might use different tools (for example Eclipse and some Wiki) and PlantUML allows you to share the very same syntax between those.
I think it’s great! It gives me an answer to my initial question: this way of writing documentation and diagrams really sounds like a good idea.
It really happens by accident, and it’s an indirect consequence of the initial version of PlantUML only working with Microsoft Word. Since the first day there has been a decoupling between the core image generation component and the integration aspects in tools.
After the initial release, some people wrote some scripts. Then I began to list them to help other people to write new scripts. I also gave support by email. At some point, scripts were complex enough to be considered as real plugins. This begins a virtuous circle because users realize that writing plugins is not very difficult since PlantUML takes care of the image generation : the plugin has only to write some text, launch PlantUML and read the resulting image.
The real evolution I would like to see is some kind of normalization of the language itself. As you mention, several “textual UML tools” exist. It would be nice if we could have interoperability between them. If the syntax used by those tools would be, if not the same, close enough, users could switch between tools easily and all those tools would benefit from that.
What is the roadmap for PlantUML? Do you plan to go beyond UML?
There is no precise roadmap. The Question & Answer forum is the place where people can report bugs and request new features. I use this Q&A as a backlog of work to do. The development is then driven by several key principles, by priority order:
- Crash fix: It happens that some diagrams make PlantUML completely crash. I try to fix those as soon as possible because it’s really annoying for end users. Those fixes are sometimes not perfect : the important thing is that PlantUML does not crash anymore even if it generates some image from a buggy artifact.
- Bug fix: There are less pressure here but I also try (if possible) to fix them before adding new features.
- Easy-to-implement feature: I would say that 50% of new features asked by users are minor and easy to implement. So rather than enlarging the already too long backlog of features to be done, I usually implement them quickly if the request is consistent with PlantUML main ideas.
- For more complex features, I group them by code impact. For example, there are currently several feature requests about the way that “activity diagram beta” prints conditional IF. These requests are different (some about the printing layout of IF in some cases, some on labels on conditions). Since the same area of code is impacted, I implement those requests at the same time.
- Architecture-driven : sometimes refactoring is needed to improve code quality and maintenance, or to facilitate the implementation of future features. I am talking here about code refactoring and this point is very important. Those refactorings do not add new features (so from end user’s perspective there is no change) but they are very important so that the code is still flexible and evolutive. Sometimes those refactoring take months!
About future, it really depends on users’ needs. It’s really more motivating to work on enhancements when you know that real people need them and will use them.
In the pipe, there is the ability to have parallel messages in sequence diagrams (actually it’s working on some test version). There is also a huge demand for “goto feature” in new activity beta diagrams but this somehow breaks the general architecture of this diagram so I have to find a nice way of doing it.
Going beyond UML is something that I would like. Today there is already some basic support for SDL diagrams and Archimate diagrams. I thank users that were motivated enough to send me the code and graphical resources for this. However, all UML diagrams are not covered yet so I think PlantUML should first support all of them before going further. That’s why PlantUML is now beginning to support Deployment Diagram even it’s not complete yet.
Another possible direction is to turn PlantUML into a real modeling tool. If you think about it, PlantUML is more right now a drawing tool than a modeling tool. It helps people to model but only through drawing. There is also very basic support for XMI ( http://plantuml.com/xmi.html ) but this feature is not highly used. XMI use would also make PlantUML easier to integrate with other modeling tools. Today, since each text diagram is independent, it is difficult to use PlantUML to build a complex model. Some people are using a preprocessor (http://plantuml.com/preprocessing.html) and include facilities to do complex stuff but this is more a hack than a real feature. I would like to be able to deal with a complex model but I have no idea about some elegant syntax for this. Suggestions welcome!
Are you open to get (code) contributions from other people interested in helping in the development of PlantUML?
Actually, the most significant contributions from other people are syntax suggestions. Many features come from users’ ideas and those ideas have really improved PlantUML. Whenever it is possible I cite and thank the author in the “what’s new pages”.
I am open to getting code from other people : I have already received some of them and integrated them in the main code of PlantUML. Usually, I receive those contributions by mail and sometimes I refactor them. Name of the author is kept in the header of the code source.
Finally, another nice way of helping is writing a new plugin for PlantUML for any existing tool.
Who else / what topics would you like to see covered on this site?
Topics that may be interesting : big data, more precisely how “unstructured data” should impact modeling.
And what about Machine learning ? How should we model a system that is using Machine Learning ? Is there something called “Modeling Learning” ?
Anything else you would like to say to our readers?
Well, if you have some diagrams to write, take a tour at http://plantuml.com, http://www.planttext.com/planttext, http://www.codeuml.com or https://www.texwriting.com/uml/new. It may help you more than you think!